关于IO流

my_caterpillar 2009-11-24 06:22:06
InputStream 读取文件的时候,是以字节的形式读取的,那么假如一个文件里边是汉字的话,读取出来然后打印才DOS窗口的话,就会出现乱码!但是,现在有一个问题,如果是InputStream 从一个文件里边读取数据,而这个文件里边是汉字,然后用OutputStream接收的话,就是说 OutputStream os = new OutputStream(new File("a.txt")); InputStream is = new InputStream(new File("b.txt")); os.read(is); 用一个循环将is里边的汉字读到os里边的时候,那么b.txt里边的全部汉字就可以完全读到a.txt里边,而不出现乱码,这是什么原因呢?愿听详解!
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_caterpillar 2010-01-28
  • 打赏
  • 举报
回复
谢谢大家的答案,我明白了!
my_caterpillar 2009-11-25
  • 打赏
  • 举报
回复
一楼的朋友,你好,InputStream字节流不是是按照字节进行读取的吗?而汉字是两个字节,它读取一个字节的话,那么就是读取半个汉字,打印出来是乱码,很正常的!同样是读取,为什么读到txt文件里边就是正常的呢?我想的是,它要是读到txt文件里边之后如果也是乱码的话,就是比较正常的了。。。如果更改编码以后,InputStream就可以按照字符型读取数据吗?
ouyangyh 2009-11-24
  • 打赏
  • 举报
回复
txt文件,是另一种显示,读取逻辑
libinsoft 2009-11-24
  • 打赏
  • 举报
回复
出现乱码-->编码不一致
pasband 2009-11-24
  • 打赏
  • 举报
回复
那是因为a.txt的编码(比如utf-8)和你的DOS窗口编码(比如gbk)不同。
你可以显式地把读出来的字节,按照DOS窗口的编码转成字符,再打印就可以了。
比如:String(byte[] bytes, Charset charset)

而你直接将a.txt按字节写到b.txt时,文件头部会有标识这个文件编码的信息,
你用编辑器打开b.txt时,编辑器就会使用正确的编码读取b.txt的内容。

还有一种方法:改变DOS窗口的显示编码,也可以正确地显示a.txt中的汉字

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧