请教,关于IO的FileInputStream的疑惑?谢谢。

wangstudyvc 2010-01-21 10:25:58
FileInputStream,读文件按照字节流。但是文件存储时每个字符是2个字节,如果是读英文字母,高8位

肯定是全0,那么循环read读字节时肯定会读到一个字母的高字节即为0值,但是实际循环read时,并没有发现?为什么一个字母的高8位丢失了呢?
...全文
159 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NS_XK 2010-01-21
  • 打赏
  • 举报
回复
FileReader读取时,读取字符,并不局限在2个字节。根据字符读取,可能是1个字节或者两个字节。
bayougeng 2010-01-21
  • 打赏
  • 举报
回复
是的,取决于编码。
其实读文本文件完全没必要用字节流。字符流会帮你处理这些繁杂的操作。
transray 2010-01-21
  • 打赏
  • 举报
回复
学习了 不错 谢谢了
wangstudyvc 2010-01-21
  • 打赏
  • 举报
回复
2楼所言,理解。

通过十六进制查看,确实一个英文是一个字节表示。

但是我还使用FileReader字符流。它是一次读取一个字符(2个字节)。循环read后,读中文时,是读2个字节,读取中文正常。但是读取英文,如果再读2个字节肯定又不对了?难道读英文又成了读1个字节吗。有些不解?
ChDw 2010-01-21
  • 打赏
  • 举报
回复
但是文件存储时每个字符是2个字节,如果是读英文字母,高8位肯定是全0,

----
错误!这个是需要根据文件格式决定的。如果文件格式是GBK(中文系统的默认格式)中文占用2个字符,英文只占用1个,如果是UTF-8,中文占用3个,英文占用1个,如果是Unicode则都占用2个

你可以使用UltraEdit中的十六进制模式看看你的文件。


所以根本不存在丢失的问题
阿_布 2010-01-21
  • 打赏
  • 举报
回复
文件存储时每个字符是2个字节
要看文件时用什么编码保存的,gbk,utf-8英文是一个字节保存的,unicode都是两个字节。

62,620

社区成员

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

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