暂时忘掉FileWriter,DataOutputStream。
- 对于二进制数据,使用
OutputStream
和InputStream
分类。他们处理byte[]
。 - 对于文本数据,使用
Reader
和Writer
分类。他们处理String
可以存储所有类型的文本,因为它内部使用Unipre。
通过指定默认为OS编码的编码,可以完成从文本到二进制数据的转换。
new OutputStreamWriter(outputStream, encoding)
string.getBytes(encoding)
因此,如果要避免
byte[]使用String,则必须滥用一种编码,该编码以任何顺序覆盖所有256个字节的值。因此,没有“ UTF-8”,而是“
windows-1252”(也称为“ Cp1252”)。
但是内部会发生转换,在极少数情况下可能会发生问题。例如
é,在Unipre中可以是一个代码,也可以是两个代码
e+结合变音符号right-accent
'。为此存在一个转换函数(java.text.Normalizer)。
已经导致问题的一种情况是不同 *** 作系统中的文件名。MacOS具有Windows之外的另一种Unipre规范化,因此在版本控制系统中需要特别注意。
因此,原则上最好使用较麻烦的字节数组或ByteArrayInputStream或java.nio缓冲区。还要注意String
char是16位的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)