黑马程序员技术交流社区
标题:
关于字节流的一个小问题
[打印本页]
作者:
杜成龙
时间:
2013-9-28 14:59
标题:
关于字节流的一个小问题
本帖最后由 杜成龙 于 2013-10-1 09:33 编辑
先看一段程序:
import java.io.*;
class InputStreamTest
{
public static void main(String[] args)
{
FileInputStream fis=null;
try
{
//创建读取流对象,并关联要被读取的文件
fis=new FileInputStream("fos.txt");
int ch=0;
//逐个字节读取并判断
while((ch=fis.read())!=-1)
{
System.out.print((char)ch);
}
}
catch (IOException e)
{
throw new RuntimeException("读取失败");
}
finally
{
if(fis!=null)
try
{
//关闭流资源
fis.close();
}
catch (IOException e)
{
throw new RuntimeException("关闭失败");
}
}
}
}
复制代码
程序运行结果为: abcde
我的fos.txt文件中就存了abcde这几个字母,看上去是对的,但是有些地方让我很不解:
程序中我使用了字节流FileInputStream去读取文件fos.txt 文件中的内容,关键是这一句:
while((ch=fis.read())!=-1)
{
System.out.print((char)ch);
}
这里fis.read()不是一个一个字节地读取吗?而我文件中的abcde里面的字母不是表示一个个的字符吗?既然每个字母是一个字符,那不表示是两个字节吗?所以你每次只相当于读了半个字符,你把半个字符强转成一个字符,怎么还能对呢?这就是我有疑问的地方,还望大家指教!谢谢啦!
作者:
a283398689
时间:
2013-9-28 15:09
这有什么不懂的 希望你给我技术分啊。~ 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类型
作者:
罗凯健
时间:
2013-9-28 15:41
不进行强制的话,输出的就是ASCII表对应的码值,是数字。这下你明白了吧
作者:
黄炳期
时间:
2013-9-28 15:46
温馨提示:read()方法读取的是单个字符,你可能记错了,这下可以理解了吧?
你可以再看看视频,或者查API
作者:
winsking
时间:
2013-9-28 15:52
我觉得是编码的问题吧,编码方案Unicode占两个字节,ASCII占一个字节,你的是那种呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2