• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

有关Java输入流和输出流的问题

J2EE 码拜 3年前 (2017-04-21) 165次浏览
1.输入流和输出流中的“流”指的就是一连串的二进制数?
2.Reader的作用是读取字节但不转换为字符,InputStreamReader读取字节并将字节转换为字符?
InputStreamReader和FileReader有什么不同?
BufferedReader和InputStreamReader、FileReader的不同之处在于BufferedReader有缓冲区,而InputStreamReader和FileReader没有?
3.InputStreamReader的中文解释如下:
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in
= new BufferedReader(new InputStreamReader(System.in));
底层流指的是内存里的二进制数吗?
“要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。”
这句话的内容是不是和缓冲区有关?“使其超过满足当前读取操作所需的字节”是什么意思?
解决方案

30

1.”流”是一种形象的比喻,就好比一条河流一样的,原因是流中的数据是一串字节序列
2.FileReader和InputStreamReader都是字节流,前者不能指定字符集,以当前环境默认字符集来读取字符,所以假如字符集不对应则乱码;后者可以指定字符集(new InputStreamReader(InputStream, Charset));BufferedReader是更高一层的输入字节流,带缓冲区,简单理解就是可以不用一个一个字节读了,最常用的就是用他来一行一行的读(xx.readLine())。(new BufferedReader(Reader),所以你可以把前两者放入这里来得到一个BufferedReader)
3.底层流不是指二进制,不用太过深究流这个意义,简单的想像成一条连接硬盘(或内存、网络等等)数据存储点和使用者之间的路,可以通过这条路来传送数据(以字节/字符/….为单位);“使其超过满足当前读取操作所需的字节”:一个字符不一定就是对应一个字节,可能多个,例如一个中文字符比一个字母或数字就要长。
以上为个人理解

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有关Java输入流和输出流的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)