首页 > 试题广场 >

FileInputStream流的read方法和FileRe

[问答题]
FileInputStream流的read方法和FileReader流的read方法有何不同?
1 读取文件不同,读取字节文件,和字符文件 2 读取方式不同,前者一般用数据字节流datainputstream辅助读取,后者使用bufferedreader字符缓冲流辅助读取 之所以是辅助是因为它们自身的读取效率底 从流的角度来说,fileinputstream和filereader分别属于文件字节流和文件字符流,文件字节流,按字节为单位读写,fileinputstream字节流的read方法以-1做返回值,原因有三,1 java整数默认为int,byte,和short整数是按照int存储和运算的,运算后在进行强制转换,也就是int的底八位和底十六位,2 read希望通过返回值标记结束,读取一字节看成int时,就没有负数[操作系统中负数补码存储] filereader字符流实现了字节字符转换流inputstreamreader[可对字节字符双向解码,字节可转换成字符,字符可转换成字节],且在底层是没有字符这一说的,都是二进制串,也就是说在底层都是用字节读写的,而filereader读取字符时内部也会转换成字节[继承了字节字符转换流] 这两种读取方式也牵涉到安全问题,字节文件和字符文件,前者要用相应流读写,后者能直接打开,而且前者可以在字节基础上附加某些规则,也就是加密,而这种规则的复杂程度也就对应密码复杂度,最后还想说说字符的一些问题,字节字符转换流是为了解决字符编码问题和流的转换而存在的,字符编码的问题一般和字符集有关,java中 char字符用unicode字符集存储,unicode使用两个字节编码字符,而字符集最初的时候只有ascll码集,但随着发展ascll不能表示更多的集合,所以出现了更多的集合,如gb2312 utf-8 还有unicode ,其中unicode表都将ascll128位字符作为基本表拓展,这也使得unicode在国际上使用程度很高,不同的字符集合自然也有差异,例如gb2312只兼容汉字,ascll只适用英文环境,还有一字节、两字节、四字节等不同位表示方法,平时写网页有乱码一般是字符集的问题,最后,欢迎补充(づ ●─● )づ
编辑于 2020-11-02 11:07:01 回复(0)