2020_05_10Java学习记录-InputStream

2020-05-12  本文已影响0人  Code_Blog

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位的字符,也就是可以根据目标文件的字符规格选择读取的长度.

上一篇下一篇

猜你喜欢

热点阅读