如何从二进制文件写入/读取字符串?读取/写入带有字符串的BINARY文件?
我试过使用writeUTF
/readUTF
(DataOutputStream/DataInputStream),但它太麻烦了。
谢谢。
如何从二进制文件写入/读取字符串?读取/写入带有字符串的BINARY文件?
我试过使用writeUTF
/readUTF
(DataOutputStream/DataInputStream),但它太麻烦了。
谢谢。
忘掉的FileWriter,DataOutputStream类一会儿。
OutputStream
和InputStream
类。他们处理byte[]
。Reader
和Writer
类。他们处理String
,它可以存储所有类型的文本,因为它在内部使用Unicode。从文本到二进制数据的交叉可以通过指定编码完成,默认为OS编码。
new OutputStreamWriter(outputStream, encoding)
string.getBytes(encoding)
所以,如果你想避免byte[]
和使用字符串必须滥用涵盖以任意顺序全部256个字节值的编码。所以没有“UTF-8”,但可能是“windows-1252”(也称为“Cp1252”)。
但内部存在转换,在极少数情况下可能会发生问题。例如é
可以在Unicode中是一个代码,或者两个,e
+结合变音标记右侧口音'
。有一个转换函数(java.text.Normalizer)。
导致问题的一种情况是不同操作系统中的文件名; MacOS有另一个Unicode规范化比Windows,因此在版本控制系统中需要特别注意。
所以原则上最好使用更繁琐的字节数组或ByteArrayInputStream或java.nio缓冲区。请注意,字符串char
s是16位。
如果你想写文字,你可以使用作家和读者。
您可以使用Data * Stream writeUTF/readUTF,但字符串长度不得超过64K个字符。
public static void main(String... args) throws IOException {
// generate a million random words.
List<String> words = new ArrayList<String>();
for (int i = 0; i < 1000000; i++)
words.add(Long.toHexString(System.nanoTime()));
writeStrings("words", words);
List<String> words2 = readWords("words");
System.out.println("Words are the same is " + words.equals(words2));
}
public static List<String> readWords(String filename) throws IOException {
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
int count = dis.readInt();
List<String> words = new ArrayList<String>(count);
while (words.size() < count)
words.add(dis.readUTF());
return words;
}
public static void writeStrings(String filename, List<String> words) throws IOException {
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
dos.writeInt(words.size());
for (String word : words)
dos.writeUTF(word);
dos.close();
}
打印
Words are the same is true
我已经在使用writeUTF/readUTF - 它太麻烦了。我有没有提到我想读取/写入二进制文件而不是纯文本?抱歉...编辑主帖 – 2012-07-20 19:49:03
我无法想象使用writeUTF/readUTF更简单。没有看到你的代码,我无法想象你是什么原因引起麻烦。 – 2012-07-20 20:01:10
如果您正在使用Java 7,请查看新的[Files](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html)类。 – Chris911 2012-07-20 18:02:13
令我嫉妒,但Java 7让我与许多较旧的程序不兼容,我宁愿以另一种方式做。 – 2012-07-20 18:04:26
向我们展示您迄今为止所尝试的内容以及您遇到错误/问题的位置。 – Chris911 2012-07-20 18:05:49