rapidjson/doc/features.zh-cn.md

96 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 特点
## 总体
* 跨平台
* 编译器Visual Studio、gcc、clang等
* 架构x86、x64、ARM等
* 操作系统Windows、Mac OS X、Linux、iOS、Android等
* 容易安装
* 只有头文件的库。只需把头文件复制至你的项目中。
* 独立、最小依赖
* 不需依赖STL、BOOST等。
* 只包含`<cstdio>`, `<cstdlib>`, `<cstring>`, `<inttypes.h>`, `<new>`, `<stdint.h>`
* 没使用C++异常、RTTI
* 高性能
* 使用模版及内联函数去降低函数调用开销。
* 内部经优化的Grisu2及浮点数解析实现。
* 可选的SSE2/SSE4.2支持。
## 符合标准
* RapidJSON应完全符合RFC4627/ECMA-404标准。
* 支持Unicod代理对surrogate pair
* 支持空字符(`"\u0000"`)。
* 例如,可以优雅地解析及处理`["Hello\u0000World"]`。含读写字符串长度的API。
## Unicode
* 支持UTF-8、UTF-16、UTF-32编码包括小端序和大端序。
* 这些编码用于输入输出流,以及内存中的表示。
* 支持从输入流自动检测编码。
* 内部支持编码的转换。
* 例如你可以读取一个UTF-8文件让RapidJSON把JSON字符串转换至UTF-16的DOM。
* 内部支持编码校验。
* 例如你可以读取一个UTF-8文件让RapidJSON检查是否所有JSON字符串是合法的UTF-8字节序列。
* 支持自定义的字符类型。
* 预设的字符类型是UTF-8为`char`UTF-16为`wchar_t`UTF32为`uint32_t`
* 支持自定义的编码。
## API风格
* SAXSimple API for XML风格API
* 类似于[SAX](http://en.wikipedia.org/wiki/Simple_API_for_XML), RapidJSON提供一个事件循序访问的解析器API`rapidjson::GenericReader`。RapidJSON也提供一个生成器API`rapidjson::Writer`),可以处理相同的事件集合。
* DOMDocument Object Model风格API
* 类似于HTMLXML的[DOM](http://en.wikipedia.org/wiki/Document_Object_Model)RapidJSON可把JSON解析至一个DOM表示方式`rapidjson::GenericDocument`以方便操作。如有需要可把DOM转换stringify回JSON。
* DOM风格API`rapidjson::GenericDocument`实际上是由SAX风格API`rapidjson::GenericReader`实现的。SAX更快但有时DOM更易用。用户可根据情况作出选择。
## 解析
* 递归式(预设)及迭代式解析器
* 递归式解析器较快,但在极端情况下可出现堆栈溢出。
* 迭代式解析器使用自定义的堆栈去维持解析状态。
* 支持原位(*in situ*)解析。
* 把JSON字符串的值解析至原JSON之中然后让DOM指向那些字符串。
* 比常规分析更快:不需字符串的内存分配、不需复制(如字符串不含转义符)、缓存友好。
* 对于JSON数字类型支持32-bit/64-bit的有号无号整数以及`double`
* 错误处理
* 支持详尽的解析错误代号。
* 支持本地化错误信息。
## DOM (Document)
* RapidJSON在类型转换时会检查数值的范围。
* 字符串字面量的优化
* 只储存指针,不作复制
* 优化“短”字符串
*`Value`内储存短字符串,无需额外分配。
* 对UTF-8字符串来说32位架构下可存储最多11字符64位下15字符。
* 可选地支持`std::string`(定义`RAPIDJSON_HAS_STDSTRING=1`
## 生成
* 支持`rapidjson::PrettyWriter`去加入换行及缩进。
## 输入输出流
* 支持`rapidjson::GenericStringBuffer`把输出的JSON储存于字符串内。
* 支持`rapidjson::FileReadStream``rapidjson::FileWriteStream`,使用`FILE`对象作输入输出。
* 支持自定义输入输出流。
## 内存
* 最小化DOM的内存开销。
* 对大部分3264位机器而言每个JSON值只占16或20字节不包含字符串
* 支持快速的预设分配器。
* 它是一个堆栈形式的分配器(顺序分配,不容许单独释放,适合解析过程之用)。
* 使用者也可提供一个预分配的缓冲区。有可能达至无需CRT分配就能解析多个JSON
* 支持标准CRTC-runtime分配器。
* 支持自定义分配器。
## 其他
* 一些C++11的支持可选
* 右值引用rvalue reference
* `noexcept`修饰符