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

时间:2023-02-24 21:37:55
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));

底层流指的是内存里的二进制数吗?
“要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。”
这句话的内容是不是和缓冲区有关?“使其超过满足当前读取操作所需的字节”是什么意思?

6 个解决方案

#1


没人吗?????????

#2


没人吗????????? 

#3


没人吗求解答啊

#4


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

#5


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


末尾有Reader流不都是字符流吗?

#6


引用 5 楼 kstg4703904 的回复:
Quote: 引用 4 楼 finemi 的回复:

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


末尾有Reader流不都是字符流吗?


 - - ,不好意思打错字了。。。第二点 是字符流。。我一会写字符一会写字节- -。。  xxxReader都是字符

#1


没人吗?????????

#2


没人吗????????? 

#3


没人吗求解答啊

#4


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

#5


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


末尾有Reader流不都是字符流吗?

#6


引用 5 楼 kstg4703904 的回复:
Quote: 引用 4 楼 finemi 的回复:

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


末尾有Reader流不都是字符流吗?


 - - ,不好意思打错字了。。。第二点 是字符流。。我一会写字符一会写字节- -。。  xxxReader都是字符