「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
1.0 字节输入流(读数据)
-
父类:
InputStream(抽象类) -
java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。
-
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
-
public abstract int read(): 从输入流读取数据的下一个字节。
-
public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中
-
子类:
FileInputStream(实现类:从文件系统中的文件获取输入字节) -
构造方法
| 方法名 | 说明 |
|---|---|
| public FileInputStream(File path) | 创建一个字节输入流管道与源文件对象接通 |
| public FileInputStream(String pathName) | 创建一个字节输入流管道与文件路径对接 |
- 方法
| 方法名 | 说明 |
|---|---|
| public int read() | 每次读取一个字节返回!读取完毕会返回 -1 |
| public int read(byte[] buffer) | 从字节输入流中读取字节到字节数组中去,返回读取的字节数量,没有字节可读返回 -1 |
- 使用字节输入流读数据的步骤:
- 1、创建字节输入流对象
- 2、调用字节输入流对象的读数据方法
- 3、释放资源
- 范例:
package test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
// 1、创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\test\\fos.txt");
//2、调用字节输入流对象的读数据方法
//int read():从该输入流读取一个字节数据
//第一次读取数据
/*int by = fis.read();
System.out.println(by); //97,表示a
System.out.println((char)by); //a
//第二次读取数据
by = fis.read();
System.out.println(by); //98
System.out.println((char)by); //b
//再多读取两次
by = fis.read();
System.out.println(by); //-1,表示没有数据了
by = fis.read();
System.out.println(by); //-1*/
//循环改进
/*int by = fis.read();
while(by != -1) {
System.out.print((char)by); //ab
by = fis.read();
}*/
//优化循环
int by;
//1、先做了读数据fis.read();2、赋值by=fis.read();3、与by 与 -1比较
while((by=fis.read()) != -1) {
System.out.print((char)by); //ab
}
//3、释放资源
fis.close();
}
}
1.1 字节缓冲流
-
缓冲流可以提高字节流和字符流的读写数据的性能
-
字节缓冲流:
BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节BufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流, 应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
-
构造方法:
- 字节缓冲输入流:
BufferedInputStream(InputStream in) - 字节缓冲输出流:
BufferedOutputStream(OutputStream out)
- 字节缓冲输入流:
-
为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
- 字节缓冲流仅仅提供缓冲区, 而真正的读写数据还得依靠基本的字节流对象进行操作
-
范例:
package test;
import java.io.*;
public class BufferStreamDemo {
public static void main(String[] args) throws IOException {
//字节缓冲输出流:BufferedOutputStream(OutputStream out)
/*FileOutputStream fos = new FileOutputStream("E:\\test\\fos.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);*/
/*BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\test\\fos.txt"));
//写数据
bos.write("hello\r\n".getBytes());
bos.write("java\r\n".getBytes());
// hello
// java
bos.close();*/
//字节缓冲输入流:BufferedInputStream(InputStreamin)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\test\\fos.txt"));
int by;
while((by=bis.read()) != -1) {
System.out.print((char)by);
// hello
// java
}
bis.close();
}
}