int n = mIn.read();
//第三步:数据读完后 n值为-1 跳出循环
if (n == -1) break;
//打印日志 观察结果
System.out.println(“读到的数据是 ->” + n + " 剩余数据字节长度 ->" + mIn.available());
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
//关闭 输入流 避免不必要的资源开销
mIn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
test.txt文本内容及打印结果
缓冲
–
爱思考的同学肯定已经想到了,一个字节一个字节的读,读取速度很慢,所以下面我们讲一下 read()的两种重载方法。
InputStream.read(byte[] b):
作用:根据参数b的大小来读取数据
参数一:读取若干字节并填充到byte[]数组,
返回值:读取的字节数 返回 -1 表示没数据可读了
InputStream.read(byte[] b, int off, int len):
作用:根据参数b的大小来读取数据
参数一:偏移量 , 这个偏移量是对数组b来说的 即从数组b的第几个位置开始装数据
参数二:最大填充数 , 这个参数也是针对数组b来说的 即一口气装多少 , 也就是不管 b数组有多大,偏移量和最大填充数已经决定了 怎么装,装多少
返回值:读取的字节数 返回 -1 表示没数据可读了
package test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class changeData {
private static InputStream mIn;
public static void main(String[] args) {
try {
//规定缓冲区大小
byte[] buffer = new byte[4];
//第一步,获取文件输入流 FileInputStream 是 InputStream 的子类
mIn = new FileInputStream(“src/test.txt”);
for (;😉{//循环读取数据
//第二步,转入buffer中 从1号位置开始装,一口气装3个数据
int n = mIn.read(buffer,1,3);
// 第三步:数据读完后 n值为-1 跳出循环
if (n == -1) break;
//打印日志 观察结果 所以对应第二步,你不能取 buffer 的0号位置数据,如果你执意要取,我只能告诉你那个值是默认的0,;因为从1号位置开始装,所以得从1号位置取
System.out.println(“读了” + n + “数据是 ->” + " 剩余数据字节长度 ->" + mIn.available() + " 读到的是 ->" + buffer[1] + buffer[2]);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
//关闭 输入流 避免不必要的资源开销
mIn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这里,我们就只演示三个参数的read,一个参数的read大家自己下去试试,很简单的
阻塞
==
在调用InputStream
的read()
方法读取数据时,我们说read()
方法是阻塞(Blocking)的。它的意思是,对于下面的代码:
int n;
n = input.read(); // 必须等待read()方法返回才能执行下一行代码
int m = n;
执行到第二行代码时,必须等read()
方法返回后才能继续。因为读取IO流相比执行普通代码,速度会慢很多,因此,无法确定read()
方法调用到底要花费多长时间。
实际应用
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!