add design doc

This commit is contained in:
shaojin.wensj 2022-08-27 03:51:25 +08:00
parent 75bd98fee4
commit e19a5b9294
2 changed files with 47 additions and 0 deletions

22
docs/design_jsonreader.md Normal file
View File

@ -0,0 +1,22 @@
JSONReader是fastjson2读取JSON数据的底层实现为了方便不同的输入分别提供了如下实现
* JSONReaderUTF16 用于处理输入为char[]的输入在JDK8下 String会转成char[]使用JSONReaderUTF16实现在JDK 9或者更高版本如果coder=1也是会使用这个实现。
* JSONReaderUTF8 用于处理输入为utf8编码的byte[]
* JSONReaderASCII是JSONReaderUTF8的派生类用于处理JDK 9之后coder=0的优化
* JSONReaderJSONB 如果输入是jsonb格式数据时使用JSONReaderJSONB实现通过相同的API实现两套协议一套API
```java
class JSONReader { }
class JSONReaderUTF16 extends JSONReader {
char[] chars;
}
class JSONReaderUTF8 extends JSONReader {
byte[] bytes;
}
class JSONReaderASCII extends JSONReaderUTF8 { }
class JSONReaderJSONB extends JSONReader {}
```

25
docs/design_jsonwriter.md Normal file
View File

@ -0,0 +1,25 @@
JSONWriter是fastjson2序列化的底层实现针对toJSONString和toJSONByte两种场景会使用JSONWriterUTF8和JSONWriterUTF16两种实现。
* JSONWriterUTF16 当使用JSON.toJSONString时缺省使用JSONWriterUTF16。
* JSONWriterUTF8 当使用JSON.toJSONByte时缺省使用JSONWriterUTF8在使用JSON.toJSONString结合JSONWriter.Feature.OptimizedForAscii使用时也会用JSONWriterUTF8实现。
* JSONWriterPretty 当JSONWriter.Feature.PrettyFormat启用时会使用JSONWriterPretty包装一个JSONWriter实现
* JSONWriterJSONB 如果序列化的结果是jsonb格式使用JSONWriterJSONB实现通过相同的API实现两套协议一套API
```java
class JSONWriter { }
class JSONWriterUTF8 extends JSONWriter { }
class JSONWriterUTF16 extends JSONWriter { }
final class JSONWriterPretty extends JSONWriter {
JSONWriter jsonWriter;
JSONWriterPretty(JSONWriter jsonWriter) {
this.jsonWriter = jsonWriter;
}
}
class JSONWriterJSONB extends JSONWriter { }
```