Class ByteSourceJsonBootstrapper


  • public final class ByteSourceJsonBootstrapper
    extends java.lang.Object
    This class is used to determine the encoding of byte stream that is to contain JSON content. Rules are fairly simple, and defined in JSON specification (RFC-4627 or newer), except for BOM handling, which is a property of underlying streams.
    • Field Detail

      • _in

        private final java.io.InputStream _in
      • _inputBuffer

        private final byte[] _inputBuffer
      • _inputPtr

        private int _inputPtr
      • _inputEnd

        private int _inputEnd
      • _bufferRecyclable

        private final boolean _bufferRecyclable
        Flag that indicates whether buffer above is to be recycled after being used or not.
      • _bigEndian

        private boolean _bigEndian
        Whether input has been detected to be in Big-Endian encoding or not.
      • _bytesPerChar

        private int _bytesPerChar
    • Constructor Detail

      • ByteSourceJsonBootstrapper

        public ByteSourceJsonBootstrapper​(IOContext ctxt,
                                          java.io.InputStream in)
      • ByteSourceJsonBootstrapper

        public ByteSourceJsonBootstrapper​(IOContext ctxt,
                                          byte[] inputBuffer,
                                          int inputStart,
                                          int inputLen)
    • Method Detail

      • detectEncoding

        public JsonEncoding detectEncoding()
                                    throws java.io.IOException
        Method that should be called after constructing an instace. It will figure out encoding that content uses, to allow for instantiating a proper scanner object.
        Throws:
        java.io.IOException
      • skipUTF8BOM

        public static int skipUTF8BOM​(java.io.DataInput input)
                               throws java.io.IOException
        Helper method that may be called to see if given DataInput has BOM marker, and if so, to skip it.
        Throws:
        java.io.IOException
        Since:
        2.8
      • constructReader

        public java.io.Reader constructReader()
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • hasJSONFormat

        public static MatchStrength hasJSONFormat​(InputAccessor acc)
                                           throws java.io.IOException
        Current implementation is not as thorough as other functionality (ByteSourceJsonBootstrapper); supports UTF-8, for example. But it should work, for now, and can be improved as necessary.
        Throws:
        java.io.IOException
      • skipSpace

        private static int skipSpace​(InputAccessor acc)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • skipSpace

        private static int skipSpace​(InputAccessor acc,
                                     byte b)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • handleBOM

        private boolean handleBOM​(int quad)
                           throws java.io.IOException
        Returns:
        True if a BOM was succesfully found, and encoding thereby recognized.
        Throws:
        java.io.IOException
      • checkUTF32

        private boolean checkUTF32​(int quad)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUTF16

        private boolean checkUTF16​(int i16)
      • reportWeirdUCS4

        private void reportWeirdUCS4​(java.lang.String type)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • ensureLoaded

        protected boolean ensureLoaded​(int minimum)
                                throws java.io.IOException
        Throws:
        java.io.IOException