public static void JsonToBion(string jsonPath, string bionPath, string toDictionaryPath = null) { using (WordCompressor compressor = (String.IsNullOrEmpty(toDictionaryPath) ? null : WordCompressor.OpenWrite(toDictionaryPath))) { string toPath = (compressor == null ? bionPath : Path.ChangeExtension(bionPath, ".preopt.bion")); using (JsonTextReader reader = new JsonTextReader(new StreamReader(jsonPath))) using (BionWriter writer = new BionWriter(File.Create(toPath), compressor: compressor)) { JsonToBion(reader, writer); } if (compressor != null) { string containerIndexPath = Path.ChangeExtension(bionPath, ".cdx"); string searchIndexPath = Path.ChangeExtension(bionPath, ".idx"); using (BionReader reader = new BionReader(File.OpenRead(toPath), compressor: compressor)) using (BufferedWriter writer = new BufferedWriter(File.Create(bionPath))) { reader.RewriteOptimized(writer, containerIndexPath, searchIndexPath); } File.Delete(toPath); // :/ Rewrite compressor; pre-optimize pass calls Dispose which writes it too early. compressor.Write(File.OpenWrite(toDictionaryPath)); } } }
private static void RoundTrip(Action <BionWriter> write, Action <BionReader> readAndVerify) { using (MemoryStream stream = new MemoryStream()) { // Write desired value(s) without closing stream using (BionWriter writer = new BionWriter(new BufferedWriter(stream) { CloseStream = false })) { write(writer); } // Track position and seek back long length = stream.Position; stream.Seek(0, SeekOrigin.Begin); // Read, verify, validate position and no more content using (BionReader reader = new BionReader(new BufferedReader(stream) { CloseStream = false })) { readAndVerify(reader); Assert.AreEqual(length, reader.BytesRead); Assert.IsFalse(reader.Read()); } } }
public void Write(Stream stream) { using (BionWriter writer = new BionWriter(stream)) { Write(writer); } }
public static void WriteToken(JsonTextReader reader, BionWriter writer) { switch (reader.TokenType) { case JsonToken.StartObject: writer.WriteStartObject(); break; case JsonToken.StartArray: writer.WriteStartArray(); break; case JsonToken.EndObject: writer.WriteEndObject(); break; case JsonToken.EndArray: writer.WriteEndArray(); break; case JsonToken.PropertyName: writer.WritePropertyName((string)reader.Value); break; case JsonToken.String: string value = (string)reader.Value; writer.WriteValue(value); break; case JsonToken.Integer: writer.WriteValue((long)reader.Value); break; case JsonToken.Boolean: writer.WriteValue((bool)reader.Value); break; case JsonToken.Null: writer.WriteNull(); break; case JsonToken.Float: writer.WriteValue((double)reader.Value); break; case JsonToken.Date: writer.WriteValue(((DateTime)reader.Value).ToString("yyyy-MM-ddThh:mm:ss.FFFFFFFZ")); break; case JsonToken.Comment: // Nothing Written break; default: throw new NotImplementedException($"JsonToBion not implemented for {reader.TokenType} @({reader.LineNumber}, {reader.LinePosition})."); } }
public void Write(BionWriter writer) { writer.WriteStartArray(); writer.WriteValue(Count); for (int i = 0; i < Count; ++i) { writer.WriteValue(Words[i]); writer.WriteValue(Counts[i]); } writer.WriteEndArray(); }
public static void JsonToBion(JsonTextReader reader, BionWriter writer) { // 6.0s //while (reader.Read()) //{ // WriteToken(reader, writer); //} // 7.1s using (BionDataWriter dataWriter = new BionDataWriter(writer)) { dataWriter.WriteToken(reader); } }
public BionDataWriter(Stream stream) { _writer = new BionWriter(stream); }
public BionDataWriter(BionWriter writer) { _writer = writer; }
public override void Close() { _writer?.Dispose(); _writer = null; }
private void Write(BionWriter writer) { _words.Write(writer); }