最近Java用的有点多,又开始了解了一下C#和WinRT,充分了解了一下他们在Stream上的设计。
外加上最近要将引擎移植到Linux/UNIX上,还需要支持PowerPC、ARM、mips等非x86处理器,各种需求开始大量暴露出来。比如大小头支持、不同编码及长度的wchar_t以及字符串支持、跨语言支持等等。
所以此次终于举起勇气开始重构和编写全新的stream式设计,已知的各种问题将在此次一举全部消灭,并带来全新的特性。更加的严格、更加的易用,更加的广泛。更加的易于学习。
- 在绝大多数情况下,输入与输出将使用分开的流进行访问。以明确有些流式访问无法同时提供输入输出的问题。
- 提供CanRead,CanWrite,CanSeek,CanRestart,CanSize等属性,以方便简测有些流式访问无法提供此类功能的问题。
- 原始数据访问与格式数据访问分离,即类似Java的InputStream/DataInputStream设计。为支持不同数据格式处理提供功能。
- 使用DataInputStream/DataOutputStream数据时,必须强制指定大小头,以保证在任何编码的处理器上,均可以正常访问数据。
- 删去原本的ReadString/WriteString,改提供新的ReadUTF16LEChars/ReadUTF16BEChars、ReadUTF8String、ReadUTF16LEString/ReadUTF16BEString等函数。全面自适应任意wchar_t类型(UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE)。
- 提供JavaInputStream/JavaOutputStream,基本对应java.io.DataInputStream/java.io.DataOutputStream,方便与Java程序交互。
- 提供DecompressInputStream/CompressOutputStream、CryptInputStream/CryptOutputStream、MD5CheckInputStream/MD5CheckOutputStream、MergeOutputStream/SplitInputStream等辅助类。可使加密、压缩、校验、合并等各种功能无缝对接,随意组合。访问压缩加密数据同访问未加密压缩数据完全一致。