java输入输出流学习
InputStream
是 Java 所有字节输入流类的父类,OutputStream
是 Java 所有字节输出流类的父类,它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法
常用子类
InputStream(字节输入流)
常用子类
- ByteArrayInputStream 类:将字节数组转换为字节输入流,从中读取字节。 FileInputStream
- FileInputStream类:从文件中读取数据。
- PipedInputStream 类:连接到一个 PipedOutputStream(管道输出流)
- SequenceInputStream 类:将多个字节输入流串联成一个字节输入流
- ObjectInputStream类:将对象反序列化。
OutputStream(字节输出流)
常用子类
- ByteArrayOutputStream 类:向内存缓冲区的字节数组中写数据。
- FileOutputStream 类:向文件中写数据。
- PipedOutputStream 类:连接到一个 PipedlntputStream(管道输入流)。
- ObjectOutputStream 类:将对象序列化。
文件输入输出流测试
新建一个测试类Person
package test;
import java.io.Serializable;
public class Person implements Serializable{
public String name;
public int year;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
将类对象输出到文件
package test;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class output {
public static void main(String[] args) throws IOException {
//实例化一个类对象
Person person = new Person();
person.setName("sk1y");
person.setYear(1);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("a.bin"));
//将对象写入文件
objectOutputStream.writeObject(person);
objectOutputStream.close();
}
}
将类对象从文件中取出
package test;
import java.io.*;
public class input {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//用文件输出流初始化对象输入流
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("a.bin"));
//读出对象
Person person =(Person) objectInputStream.readObject();
System.out.println(objectInputStream);
System.out.println(person.getName());
System.out.println(person.getYear());
}
}
字节数组输入输出测试
字节数组输入流
package test;
import java.io.ByteArrayInputStream;
public class byteinput {
public static void main(String[] args){
byte[] a = new byte[]{1,2,3,4};
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(a);
//从输入流中读取下一个字节
int i = byteArrayInputStream.read();
while ( i != -1){
System.out.println(i);
i = byteArrayInputStream.read();//读取下一个
}
}
}
字节数组输出流
byte[] toByteArray():以字节数组的形式返回输出流中的当前内容。
package test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class byteoutput {
public static void main(String[] args) throws IOException {
byte[] bytes = {2, 3, 4, 5, 6, 70,1};
// System.out.println(bytes);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(bytes);
//输出缓冲区的字节数
System.out.println("字节数组的大小为"+ byteArrayOutputStream.size() + "个字节");
//将输出流中得到内容转换为字节数组
byte[] bytes1 = byteArrayOutputStream.toByteArray();
//输出数组
System.out.println(Arrays.toString(bytes1));
}
}