首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileOutputStream和DataOutput流的问题

FileOutputStream和DataOutput流的问题
EN

Stack Overflow用户
提问于 2014-02-20 07:40:15
回答 6查看 257关注 0票数 0

问题是,当我使用FileOutputStream编写字符时,它是可读的。但是当我用DataOutputStream链接它时,所写的数据就变得不可读了。

那是为什么?因为FileOutputStreamDataInputStream都以字节写入文件。处理过程将如何进行?

代码:

代码语言:javascript
复制
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();

在本例中,将显示以下输出:

需要弄明白为什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-02-20 07:52:36

不同之处不在于OutputStreams,而在于您正在使用的写入方法:它们不同。在第一个示例中使用dp.write(),在第二个示例中使用dp.writeChar()

在第二个示例中将dp.writeChar()更改为dp.write(),结果将与预期的一样。

java.io.DataOutputStream.writeChar(int)方法实现如下:

代码语言:javascript
复制
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)有以下实现:

代码语言:javascript
复制
 public synchronized void write(int b) throws IOException {
     out.write(b);
     incCount(1);
 }

write(int)的源代码

票数 1
EN

Stack Overflow用户

发布于 2014-02-20 07:56:53

writeChar用UTF-16编码将字符写成2字节值.万一'J‘是00 4A。要正确地显示它,需要使用正确的编码。

票数 1
EN

Stack Overflow用户

发布于 2014-02-20 07:59:40

DataOutputStream用于以可移植的方式存储原语。

看看字符是如何写入流的。

代码语言:javascript
复制
public final void writeChar(int v) throws IOException {
  out.write((v >>> 8) & 0xFF);
  out.write((v >>> 0) & 0xFF);
  incCount(2);
}

一个字符是用2个字节写的,首先是高字节。因为高字节是0(在您的例子中是'J‘=> 004A),结果就是您在文件中看到的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21901251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档