view Implab/Formats/JSON/JsonTextScanner.cs @ 229:5f7a3e1d32b9 v2

JsonXmlReader performance tuning JsonScanner now operates strings and doesn't parses number and literals. Added SerializationHelpers to common serialize/deserialize operations
author cin
date Tue, 12 Sep 2017 19:07:42 +0300
parents 6fa235c5a760
children
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Implab.Formats.Json {
    public class JsonTextScanner : JsonScanner {
        const int _bufferSize = 16*4096;
        readonly TextReader m_reader;

        JsonTextScanner(TextReader reader, char[] buffer) : base(buffer, 0, 0) {
            m_reader = reader;
        }

        protected override int Read(char[] buffer, int offset, int size) {
            return m_reader.Read(buffer, offset, size);
        }

        public static JsonTextScanner Create(string file, Encoding encoding) {
            return new JsonTextScanner(new StreamReader(file, encoding), new char[_bufferSize]);
        }

        public static JsonTextScanner Create(string file) {
            return new JsonTextScanner(new StreamReader(file), new char[_bufferSize]);
        }

        public static JsonTextScanner Create(Stream stream, Encoding encoding) {
            return new JsonTextScanner(new StreamReader(stream, encoding), new char[_bufferSize]);
        }

        public static JsonTextScanner Create(Stream stream) {
            return new JsonTextScanner(new StreamReader(stream), new char[_bufferSize]);
        }

        public static JsonTextScanner Create(TextReader reader) {
            Safe.ArgumentNotNull(reader, nameof(reader));
            return new JsonTextScanner(reader, new char[_bufferSize]);
        }

        protected override void Dispose(bool disposing) {
            if (disposing)
                Safe.Dispose(m_reader);

            base.Dispose(disposing);
        }
    }
}