A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜成龙 中级黑马   /  2013-9-28 14:59  /  1843 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜成龙 于 2013-10-1 09:33 编辑

先看一段程序:
  1. import java.io.*;
  2. class InputStreamTest
  3. {
  4. public static void main(String[] args)
  5. {
  6. FileInputStream fis=null;
  7. try
  8. {
  9. //创建读取流对象,并关联要被读取的文件
  10. fis=new FileInputStream("fos.txt");
  11. int ch=0;
  12. //逐个字节读取并判断
  13. while((ch=fis.read())!=-1)
  14. {
  15. System.out.print((char)ch);
  16. }
  17. }
  18. catch (IOException e)
  19. {
  20. throw new RuntimeException("读取失败");
  21. }
  22. finally
  23. {
  24. if(fis!=null)
  25. try
  26. {
  27. //关闭流资源
  28. fis.close();
  29. }
  30. catch (IOException e)
  31. {
  32. throw new RuntimeException("关闭失败");
  33. }
  34. }
  35. }
  36. }
复制代码
程序运行结果为: abcde
我的fos.txt文件中就存了abcde这几个字母,看上去是对的,但是有些地方让我很不解:
程序中我使用了字节流FileInputStream去读取文件fos.txt 文件中的内容,关键是这一句:
while((ch=fis.read())!=-1)
{
System.out.print((char)ch);
}
这里fis.read()不是一个一个字节地读取吗?而我文件中的abcde里面的字母不是表示一个个的字符吗?既然每个字母是一个字符,那不表示是两个字节吗?所以你每次只相当于读了半个字符,你把半个字符强转成一个字符,怎么还能对呢?这就是我有疑问的地方,还望大家指教!谢谢啦!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
这有什么不懂的 希望你给我技术分啊。~   while((ch=fis.read())!=-1)
{
System.out.print((char)ch);
}      


  、//  while((ch=fis.read())!=-1) 看里面有几个括号    先读文件 , 赋值给  ch    如果ch 的大小 不等-1
就执行  System.out.print((char)ch);   就是打印 ch   前面加括号就是强制转换成char类型

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
不进行强制的话,输出的就是ASCII表对应的码值,是数字。这下你明白了吧
回复 使用道具 举报
温馨提示:read()方法读取的是单个字符,你可能记错了,这下可以理解了吧?
你可以再看看视频,或者查API
回复 使用道具 举报
我觉得是编码的问题吧,编码方案Unicode占两个字节,ASCII占一个字节,你的是那种呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马