I/O流
ava输入/输出流
一个输入流用于从源读取数据。并且,输出流用于将数据写入目标。
流的类型
流的类型包括
- 字节流
- 字符流
字节流(Byte)
字节流用于读取和写入单个字节(8位)的数据。
所有字节流类都派生自称为InputStream和OutputStream的基本抽象类。
InputSreeam / OutputStream
InputStream和OutputStream都是是抽象类
InputStream包含的子类
- FileInputStream 用于从文件中读取数据(以字节为单位)
- ByteArrayInputStream 用于读取输入数据数组(以字节为单位)
- ObjectInputStream 用于读取ObjectOutputStream先前编写的对象。
OutputStream包含的子类
- FileOutputStream 用于将数据(以字节为单位)写入文件
- ByteArrayOutputStream 用于写入输出数据数组(以字节为单位)
- ObjectOutputStream 用于编写可由ObjectInputStream读取的对象。
InputStream的方法
方法 | 描述 |
---|---|
read() | 从输入流中读取一个字节的数据 |
read(byte[] array) | 从流中读取字节并存储在指定的数组中 |
available() | 返回输入流中可用的字节数 |
mark() | 标记输入流中数据所在的位置 |
reset() | 将控制点返回到流中设置标记的点 |
markSupported() | 检查流中是否支持mark()和reset()方法 |
skips() | 跳过和丢弃输入流中的指定字节数 |
close() | 关闭输入流 |
OutputStream的方法
方法 | 描述 |
---|---|
write() | 将指定的字节写入输出流 |
write(byte[] array) | 将指定数组中的字节写入输出流 |
flush() | 强制将输出流中存在的所有数据写入目标 |
close() | 关闭输出流 |
示例:
import java.io.FileInputStream;
import java.io.InputStream;
public class Main {
public static void main(String args[]) {
byte[] array = new byte[100];
try {
InputStream input = new FileInputStream("input.txt");
System.out.println("文件中的可用字节: " + input.available());
//从输入流中读取字节
input.read(array);
System.out.println("从文件读取的数据: ");
//将字节数组转换为字符串
String data = new String(array);
System.out.println(data);
//关闭输入流
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
创建一个ObjectInputStream
//创建与指定文件链接的文件输入流
FileInputStream fileStream = new FileInputStream(String file);
//使用文件输入流创建对象输入流
ObjectInputStream objStream = new ObjectInputStream(fileStream);
ObjectInputStream的方法
方法 | 描述 |
---|---|
read() | 从输入流中读取一个字节的数据 |
readBoolean() | 以布尔形式读取数据 |
readChar() | 以字符形式读取数据 |
readInt() | 以整数形式读取数据 |
readObject() | 从输入流中读取对象 |
ObjectInputStream示例
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Dog implements Serializable {
String name;
String breed;
public Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
class Main {
public static void main(String[] args) {
//创建一个Dog类的对象
Dog dog = new Dog("Tyson", "Labrador");
try {
FileOutputStream file = new FileOutputStream("file.txt");
//创建一个ObjectOutputStream
ObjectOutputStream output = new ObjectOutputStream(file);
//将对象写入输出流
output.writeObject(dog);
FileInputStream fileStream = new FileInputStream("file.txt");
//创建一个ObjectInputStream
ObjectInputStream input = new ObjectInputStream(fileStream);
//读取对象
Dog newDog = (Dog) input.readObject();
System.out.println("狗的名字: " + newDog.name);
System.out.println("犬种: " + newDog.breed);
output.close();
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
字符流 (Character)
字符流用于读取和写入单个数据字符。
所有字符流类都派生自基本抽象类Reader和Writer。