2020_05_10Java学习记录-InputStream
InputStream
InputStreamReader
Reader
由于这只是一个程序新手的学习记录,如果有错误敬请指出!!!
在5月6号的Java课中,老师讲到了以上三个方法,并要求我们对其自行进行进一步详细的了解与学习.
问题1: Reader和InputStreamReader之间的关系
在浏览了一定资料后,我也对这两个方法有了一定的了解
Reader
:读取的是字符流
InputStreamReader
相当于一个字节到字符的转换器,将输入的字节流转换为字符
Reader
是各种输入流的父类,且用来处理16位元的流(也就是Unicode编码的字符),所以在处理中文的时候,可以使用Reader
InputStreamReader
在我使用程序进行几次尝试之后,明白这个方法只是一个格式的"转换器",将本来为字节的输入流转换为16位字符,同时我产生了一种想法,如果使用InputStreamReader处理非字节单位输入的输入流会发生什么?(但是我不知道如何生成一个非字节的输入流)
所以先暂时在这里留下我的猜想:
一.假如可以运行
1.在输入流单位大于8时,方法可能只是会读取每个单位的前八位,然后将他们转换成16位的字符(也就是会导致数据缺失
2.在输入流单位小于8时,会自动对每个单位进行补足然后再转换成字符.
二.假如不可运行
1.程序报错,产生IO异常
问题2:InputStream 、 InputStreamReader和BufferedReader三者的差异性
InputStreamReader
在问题一中的描述也已经是目前为止我对他的全部了解了.
InputStream
是所有字节输入流的超类,平时我们肯定是使用到他的子类,比如FileInputStream
等
而存在输入(Input),肯定对应的存在输出(Output),将上述类中的Input换成Output就为相应的输出流概念.
BufferedReader
相比于InputStream
多了一个缓冲方式文本读取,相比于InpoutStream一个byte一个byte的读取数据更为的高效.
问题3:FileInputStream代表什么含义
FileInputStream
我自作主张的翻译它为"文件输入流",从他的构造上就可以看出,这是一个InputStream
的子类,继承自InputStream
,用于读取本地文件中的字节数据,由于我的Java环境是在Windows上的,而Windows上的文件都是以字节为单位的,因此它适用于操作任何形式的文件.
而FileInputStream存在最重要的两个方法Read()和Read(byte[] b)
这两个方法简单的介绍:
Read():每调用一次Read()方法,都从目标文件中继续读取1字节的数据当取至文件末尾时,则返回-1.
而Read(byte[] b)则是可以自定义单次读取的字节数进行读取,相较于Read()多了一个缓冲的技术并且允许读取非8位的字符,也就是可以根据目标文件的字符规格选择读取的长度.