java中read()方法返回值解释

最近做作业,读取大数据集,然后做处理分析的项目。
当我用fileinputstream流读取文件的时候,然后用fileinputstream.read()方法读取文件的时候,当我查看API的时候,发现read()是读取每个字节,然后返回一个int类型,有没有很纳闷,读取的字节,为什么返回一个int呢?
FileInputStream.read()读取一个byte却返回一个int的原因如下:
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
                那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上
                24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型

FileInputStream.read()返回一个unsigned byte [0 - 255],而java里面没有这个类型,所以用int接收。byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
`java.io.BufferedReader`是一个从字符输入读取一行文本数据的辅助类,它实际上是`BufferedReader`的一个实例,专门用于处理文件输入。 当你创建并初始化一个`BufferedReader reader = new BufferedReader(new FileReader(filename));`这样的对象时,这个`reader`就是一个可以逐行读取指定文件内容的对象。通常来说,我们对`BufferedReader`进行读操作的时候,主要是通过其方法来进行: 1. `read()`: 该方法每次读取一个字节,并将其转换为对应的整数返回。如果到达文件末尾则返回 -1 表示结束。 ```java int result = reader.read(); ``` 2. `read(char[] cbuf)`: 此方法将一定数量的数据从当前缓冲区读入到数组 `cbuf` ,并返回实际读取的字节数。如果没有足够的数据,则返回 -1 表示文件结尾。 ```java int bytesRead = reader.read(cbuf); ``` 3. `read(char[] cbuf, int off, int len)`: 类似于上面的 `read(char[] cbuf)` ,但是允许您控制读入数据的位置和长度。 4. `readLine()`: 这是常用的方法之一,主要用于按行读取文件内容。每次调用返回一行字符串,直到遇到换行符。当读到文件末尾或者到达了预设大小(例如设置的缓存大小),则返回空字符串(`""`)。 ```java String line = reader.readLine(); ``` 5. `close()` : 关闭此 `BufferedReader` 并释放与此关联的所有资源。 ```java reader.close(); ``` 所以,当我们说`java.io.BufferedReader`的“返回值”时,其实是在描述这些方法的功能,而不是直接有一个特定的返回值类型如 `int` 或者 `String` 。这些方法返回的是特定数据类型的值,例如 `int`, `String`, 等等,它们代表了程序读取文件的不同阶段的结果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值