Package io.micronaut.http.netty.body
Class JsonCounter
java.lang.Object
io.micronaut.http.netty.body.JsonCounter
This class takes in JSON data and does simple parsing to detect boundaries between json nodes.
 For example, this class can recognize the separation between the two JSON objects in
 
Public for fuzzing.
{"foo":"bar"} {"bar":"baz"}.Public for fuzzing.
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic final recordA region that contains a JSON node.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionlongIf we arebuffering, the startposition()of the region that is being buffered.voidfeed(io.netty.buffer.ByteBuf buf) Parse some input data.booleanWhether we are currently in the buffering state, i.e.voidDo not perform any tokenization, assume that there is only one root-level value.Check for any new flushed data from the lastfeed(ByteBuf)operation.longposition()The current position counter of the parser.voidEnable top-level array unwrapping: If the input starts with an array, that array's elements are returned as individual JSON nodes, not the array all at once.
- 
Constructor Details- 
JsonCounterpublic JsonCounter()
 
- 
- 
Method Details- 
feedParse some input data. Ifbufis readable, this method always advances (always consumes at least one byte).- Parameters:
- buf- The input buffer
- Throws:
- JsonSyntaxException- If there is a syntax error in the JSON. Note that not all syntax errors are detected by this class.
 
- 
unwrapTopLevelArraypublic void unwrapTopLevelArray()Enable top-level array unwrapping: If the input starts with an array, that array's elements are returned as individual JSON nodes, not the array all at once.
 Must be called before any data is processed, but can be called afternoTokenization().
- 
noTokenizationpublic void noTokenization()Do not perform any tokenization, assume that there is only one root-level value. There is still some basic validation (ensuring the input isn't utf-16 or utf-32).
- 
pollFlushedRegionCheck for any new flushed data from the lastfeed(ByteBuf)operation.- Returns:
- The region that contains a JSON node, relative to position(), ornullif the JSON node has not completed yet.
 
- 
positionpublic long position()The current position counter of the parser. Increases by exactly one for each byte consumed byfeed(io.netty.buffer.ByteBuf).- Returns:
- The current position
 
- 
isBufferingpublic boolean isBuffering()Whether we are currently in the buffering state, i.e. there is a JSON node, but it's not done yet or we can't know for sure that it's done (e.g. for numbers). This is used to flush any remaining buffering data when EOF is reached.- Returns:
- trueif we are currently buffering
 
- 
bufferStartpublic long bufferStart()If we arebuffering, the startposition()of the region that is being buffered.- Returns:
- The buffer region start
- Throws:
- IllegalStateException- if we aren't buffering
 
 
-