如何从二进制文件写入/读取字符串?
我尝试过使用 writeUTF
/readUTF
(DataOutputStream/DataInputStream),但太麻烦了。
谢谢。
最佳答案
暂时忘记 FileWriter、DataOutputStream。
- 对于二进制数据,可以使用
OutputStream
和InputStream
类。它们处理byte[]
。 - 对于文本数据,可以使用
Reader
和Writer
类。它们处理可以存储所有类型文本的String
,因为它内部使用 Unicode。
从文本到二进制数据的交叉可以通过指定编码来完成,默认为操作系统编码。
new OutputStreamWriter(outputStream, 编码)
string.getBytes(编码)
因此,如果您想避免 byte[]
并使用 String,则必须滥用以任何顺序覆盖所有 256 字节值的编码。所以没有“UTF-8”,但可能是“windows-1252”(也称为“Cp1252”)。
但内部存在转换,在极少数情况下可能会出现问题。例如,é
在 Unicode 中可以是一个或两个代码,e
+ 组合变音标记右重音 '
。为此存在一个转换函数(java.text.Normalizer)。
这已经导致问题的一种情况是不同操作系统中的文件名; MacOS比Windows有另一种Unicode规范,因此在版本控制系统中需要特别注意。
所以原则上最好使用更麻烦的字节数组,或者ByteArrayInputStream,或者java.nio缓冲区。还要注意 String char
是 16 位。
关于java - 读取/写入带有字符串的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584508/