java - 读取/写入带有字符串的二进制文件?

标签 java string binary datainputstream dataoutputstream

如何从二进制文件写入/读取字符串?

我尝试过使用 writeUTF/readUTF (DataOutputStream/DataInputStream),但太麻烦了。

谢谢。

最佳答案

暂时忘记 FileWriter、DataOutputStream。

  • 对于二进制数据,可以使用 OutputStreamInputStream 类。它们处理byte[]
  • 对于文本数据,可以使用 ReaderWriter 类。它们处理可以存储所有类型文本的 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/

相关文章:

java - JTextArea 存储每一行

c# - 如何从目录 c# 中读取所有文件?

c - C语言中的二进制计数器

c - 在给定的二进制数据中找到最大面积

java - 监听 JComboBoxes 和 JTextFields 来修改激活类突变器

java - android oreo 上的永久服务

linux - 构建一个包含大字符串的文件

java - 为什么 Java StampedLock 比 ReentrantReadWriteLock 更快

java - 如何在 Spring 中更新 @Autowired String bean 的值?

java - Java中的遗传算法分类器:基于规则的系统