问题是,当我使用FileOutputStream编写字符时,它是可读的。但是当我用DataOutputStream链接它时,所写的数据就变得不可读了。
那是为什么?因为FileOutputStream和DataInputStream都以字节写入文件。处理过程将如何进行?
代码:
File newFile = new File("C:\\Jeevantest.as");
FileOutputStream outFp = new FileOutputStream(newFile);
outFp.write('X');
outFp.close();
In the file Jeevantest.as, the char 'X' can be seen.
File newFile = new File("C:\\Jeevantest.as");
FileOutputStream outFp = new FileOutputStream(newFile);
DataOutputStream dp = new DataOutputStream(outFp);
dp.writeChar('J');
outFp.close();在本例中,将显示以下输出:

需要弄明白为什么?
发布于 2014-02-20 07:52:36
不同之处不在于OutputStreams,而在于您正在使用的写入方法:它们不同。在第一个示例中使用dp.write(),在第二个示例中使用dp.writeChar()。
在第二个示例中将dp.writeChar()更改为dp.write(),结果将与预期的一样。
java.io.DataOutputStream.writeChar(int)方法实现如下:
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}见writeChar(int)的源代码
而java.io.DataOutputStream.write(int)有以下实现:
public synchronized void write(int b) throws IOException {
out.write(b);
incCount(1);
}见write(int)的源代码
发布于 2014-02-20 07:56:53
writeChar用UTF-16编码将字符写成2字节值.万一'J‘是00 4A。要正确地显示它,需要使用正确的编码。
发布于 2014-02-20 07:59:40
DataOutputStream用于以可移植的方式存储原语。
看看字符是如何写入流的。
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}一个字符是用2个字节写的,首先是高字节。因为高字节是0(在您的例子中是'J‘=> 004A),结果就是您在文件中看到的结果。
https://stackoverflow.com/questions/21901251
复制相似问题