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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亚青 中级黑马   /  2013-3-21 11:00  /  1536 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

从API文档中可以看到如下解释:
FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。

FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

【问题】FileInputStream就不能读取字符流文件吗?我试了一下,是可以的,请大虾们给详细解释下。

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-21 19:28

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

倒序浏览
这个问题本质是在问字节流和字符流的区别:
字符 FileReader:一次读取二个字节
字节FileInputStream:一次读取一个字节
例:你现在要读一个汉字(以二个字节来存,既:一个字符)的“汉”。
        1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
        2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
读取文本就用字符流,  其他都用字节流。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
Java最先是只有字节流(java1.0)的,字节流可以操作所有的JAVA文件,
但是为了对文本文档的操作更效率,产生了字符流(java1.1),字符流是在字节流+编码表的情况下产生的
字节流:一次读取一个字节,即是一个byte字节
        使用:    直接对文件进行操作,不需要调用内存缓冲,也就不需要对输出流进行刷新,效率高。可操作任意类型的文件,譬如照片,多媒体等等的传输。
字符流:一次读取两个字节,即是一个char型字符
        使用:  可以自定义一个缓冲数组,也可用JAVA封装好的缓冲。所以在写入完毕之后,需要通过刷新flush()方法将缓冲区的数据刷如文件中,一般用于文本类型文件的传输。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马