java - FileOutputStream 和 DataOutput Stream 的问题

标签 java dataoutputstream filestreams

问题是当我使用 FileOutputStream 写入字符时,它是可读的。 但是,当我将其与 DataOutputStream 链接时,写入的数据将变得不可读。

这是为什么呢?由于 FileOutputStreamDataInputStream 都以字节形式写入文件。处理具体如何进行?

代码:

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();

在这种情况下,将显示以下输出:

Output

需要了解原因吗?

最佳答案

差异不在于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)的源代码

关于java - FileOutputStream 和 DataOutput Stream 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21901251/

相关文章:

java - 将 ByteBuffer 的内容写入 DataOutput?

java - DataOutputStream 给我一个 'java.io.IOException: unexpected end of stream' ?

c# - 在文件流传输中实现停止和重新启动 - 如何实现? C# 网络

Java泛型继承警告

java - 那里有 "Jetty server builder"项目吗?

java - 为什么 DataOutputStream.writeUTF() 在开头添加额外的 2 个字节?

c++ - UTF-8 兼容的 IOstreams

java - BigDecimal.floatValue 与 Float.valueOf

java - Android - WebView向下滚动时刷新

Python:打开文件而不创建锁