/// <summary> /// Serializes the given <see cref="FacetLabel"/> to the <see cref="CharBlockArray"/>. /// </summary> public static void Serialize(FacetLabel cp, CharBlockArray charBlockArray) { charBlockArray.Append((char)cp.Length); if (cp.Length == 0) { return; } for (int i = 0; i < cp.Length; i++) { charBlockArray.Append((char)cp.Components[i].Length); charBlockArray.Append(cp.Components[i]); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jsonObect = JObject.Load(reader); var properties = jsonObect.Properties().ToArray(); int blockSize = -1; string contents = null; Func <bool> arePropertiesSet = () => blockSize > 0 && !string.IsNullOrEmpty(contents); foreach (var property in properties) { if (property.Name.Equals(CharBlockArrayConverter.BLOCK_SIZE, StringComparison.OrdinalIgnoreCase)) { blockSize = property.Value.Value <int>(); } else if (property.Name.Equals(CharBlockArrayConverter.CONTENTS, StringComparison.OrdinalIgnoreCase)) { contents = property.Value.Value <string>(); } if (arePropertiesSet()) { break; } } if (!arePropertiesSet()) { return(null); } var deserialized = new CharBlockArray(blockSize); deserialized.Append(contents); return(deserialized); }
public virtual void TestArray() { CharBlockArray array = new CharBlockArray(); StringBuilder builder = new StringBuilder(); const int n = 100 * 1000; byte[] buffer = new byte[50]; // This is essentially the equivalent of // CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder() // .onUnmappableCharacter(CodingErrorAction.REPLACE) // .onMalformedInput(CodingErrorAction.REPLACE); // // Encoding decoder = Encoding.GetEncoding(Encoding.UTF8.CodePage, // new EncoderReplacementFallback("?"), // new DecoderReplacementFallback("?")); for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. Encoding decoder = Encoding.GetEncoding(Encoding.UTF8.CodePage, new EncoderReplacementFallback("?"), new DecoderReplacementFallback("?")); string s = decoder.GetString(buffer, 0, size); array.Append(s); builder.Append(s); } for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. Encoding decoder = Encoding.GetEncoding(Encoding.UTF8.CodePage, new EncoderReplacementFallback("?"), new DecoderReplacementFallback("?")); string s = decoder.GetString(buffer, 0, size); array.Append(s); builder.Append(s); } for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. Encoding decoder = Encoding.GetEncoding(Encoding.UTF8.CodePage, new EncoderReplacementFallback("?"), new DecoderReplacementFallback("?")); string s = decoder.GetString(buffer, 0, size); for (int j = 0; j < s.Length; j++) { array.Append(s[j]); } builder.Append(s); } AssertEqualsInternal("GrowingCharArray<->StringBuilder mismatch.", builder, array); DirectoryInfo tempDir = CreateTempDir("growingchararray"); FileInfo f = new FileInfo(Path.Combine(tempDir.FullName, "GrowingCharArrayTest.tmp")); using (var @out = new FileStream(f.FullName, FileMode.OpenOrCreate, FileAccess.Write)) { array.Flush(@out); @out.Flush(); } using (var @in = new FileStream(f.FullName, FileMode.Open, FileAccess.Read)) { array = CharBlockArray.Open(@in); AssertEqualsInternal("GrowingCharArray<->StringBuilder mismatch after flush/load.", builder, array); } f.Delete(); }
public virtual void TestArray() { CharBlockArray array = new CharBlockArray(); StringBuilder builder = new StringBuilder(); const int n = 100 * 1000; byte[] buffer = new byte[50]; for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. string s = Encoding.UTF8.GetString(buffer, 0, size); array.Append(s); builder.Append(s); } for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. string s = Encoding.UTF8.GetString(buffer, 0, size); array.Append(s); builder.Append(s); } for (int i = 0; i < n; i++) { Random().NextBytes(buffer); int size = 1 + Random().Next(50); // This test is turning random bytes into a string, // this is asking for trouble. string s = Encoding.UTF8.GetString(buffer, 0, size); for (int j = 0; j < s.Length; j++) { array.Append(s[j]); } builder.Append(s); } AssertEqualsInternal("GrowingCharArray<->StringBuilder mismatch.", builder, array); DirectoryInfo tempDir = CreateTempDir("growingchararray"); FileInfo f = new FileInfo(Path.Combine(tempDir.FullName, "GrowingCharArrayTest.tmp")); using (var @out = new FileStream(f.FullName, FileMode.OpenOrCreate, FileAccess.Write)) { array.Flush(@out); @out.Flush(); } using (var @in = new FileStream(f.FullName, FileMode.Open, FileAccess.Read)) { array = CharBlockArray.Open(@in); AssertEqualsInternal("GrowingCharArray<->StringBuilder mismatch after flush/load.", builder, array); } f.Delete(); }