1、IO流-序列流:SequenceInputStream(InputStream, InputStream)
序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读。
FileInputStream fis1 = new FileInputStream("a.txt"); //创建输入流对象,关联a.txt
FileInputStream fis2 = new FileInputStream("b.txt"); //创建输入流对象,关联b.txt
SequenceInputStream sis = new SequenceInputStream(fis1, fis2); //将两个流整合成一个流
FileOutputStream fos = new FileOutputStream("c.txt"); //创建输出流对象,关联c.txt
int b;//按字节流读取,定义b接受一个字节数据
while((b = sis.read()) != -1) { //用整合后的读
fos.write(b); //写到指定文件上
}
sis.close();
fos.close();
关闭流的时候,只需要关闭序列流即可。
2、IO流-内存输出流:ByteArrayOutputStream
内存输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据。
使用方式:
创建对象: new ByteArrayOutputStream()
写出数据: write(int), write(byte[])
获取数据: toByteArray()
FileInputStream fis = new FileInputStream("a.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();//定义一个内存输出流
int b;
while((b = fis.read()) != -1) {
baos.write(b);
}
//byte[] newArr = baos.toByteArray(); //也可以创建数组接收
//System.out.println(new String(newArr));
System.out.println(baos);//可以直接输出流对象
fis.close();
3、IO流-对象操作流:ObjecOutputStream、ObjectInputStream
可以用于存档游戏数据。
写出:
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
//FileOutputStream fos = new FileOutputStream("e.txt");
//fos.write(p1);//会出现错误
//FileWriter fw = new FileWriter("e.txt");
//fw.write(p1);//会出现错误
//无论是字节输出流,还是字符输出流都不能直接写出对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));//创建对象输出流
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
读取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject();
System.out.println(p1);
System.out.println(p2);
ois.close();
4、IO流-标准输入输出流:
System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
也可以调用System类的方法修改输入输出流
修改输入流: System.setIn(InputStream)
修改输出流: System.setOut(PrintStream)
System.setIn(new FileInputStream("a.txt")); //修改标准输入流
System.setOut(new PrintStream("b.txt"));
5、IO流-两种方式实现键盘录入:
a、BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//InputStreamReader 是一个字符输入流
b、Scanner
Scanner sn = new Scanner(System.in);
sn.nextline();
6、IO流-数据输入输出流: DataInputStream, DataOutputStream
DataOutputStream dos = new DataOutputStream(new FileOutputStream("b.txt"));
dos.writeInt(997);
dos.writeInt(998);
dos.writeInt(999);
dos.close();
注意:如果没有用数据流,写数据会将数据的前24位(int数据共32位,写后8位的byte)丢掉,会有问题。
序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读。
FileInputStream fis1 = new FileInputStream("a.txt"); //创建输入流对象,关联a.txt
FileInputStream fis2 = new FileInputStream("b.txt"); //创建输入流对象,关联b.txt
SequenceInputStream sis = new SequenceInputStream(fis1, fis2); //将两个流整合成一个流
FileOutputStream fos = new FileOutputStream("c.txt"); //创建输出流对象,关联c.txt
int b;//按字节流读取,定义b接受一个字节数据
while((b = sis.read()) != -1) { //用整合后的读
fos.write(b); //写到指定文件上
}
sis.close();
fos.close();
关闭流的时候,只需要关闭序列流即可。
2、IO流-内存输出流:ByteArrayOutputStream
内存输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据。
使用方式:
创建对象: new ByteArrayOutputStream()
写出数据: write(int), write(byte[])
获取数据: toByteArray()
FileInputStream fis = new FileInputStream("a.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();//定义一个内存输出流
int b;
while((b = fis.read()) != -1) {
baos.write(b);
}
//byte[] newArr = baos.toByteArray(); //也可以创建数组接收
//System.out.println(new String(newArr));
System.out.println(baos);//可以直接输出流对象
fis.close();
3、IO流-对象操作流:ObjecOutputStream、ObjectInputStream
可以用于存档游戏数据。
写出:
Person p1 = new Person("张三", 23);
Person p2 = new Person("李四", 24);
//FileOutputStream fos = new FileOutputStream("e.txt");
//fos.write(p1);//会出现错误
//FileWriter fw = new FileWriter("e.txt");
//fw.write(p1);//会出现错误
//无论是字节输出流,还是字符输出流都不能直接写出对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));//创建对象输出流
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
读取:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
Person p1 = (Person) ois.readObject();
Person p2 = (Person) ois.readObject();
System.out.println(p1);
System.out.println(p2);
ois.close();
4、IO流-标准输入输出流:
System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
也可以调用System类的方法修改输入输出流
修改输入流: System.setIn(InputStream)
修改输出流: System.setOut(PrintStream)
System.setIn(new FileInputStream("a.txt")); //修改标准输入流
System.setOut(new PrintStream("b.txt"));
5、IO流-两种方式实现键盘录入:
a、BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//InputStreamReader 是一个字符输入流
b、Scanner
Scanner sn = new Scanner(System.in);
sn.nextline();
6、IO流-数据输入输出流: DataInputStream, DataOutputStream
DataOutputStream dos = new DataOutputStream(new FileOutputStream("b.txt"));
dos.writeInt(997);
dos.writeInt(998);
dos.writeInt(999);
dos.close();
注意:如果没有用数据流,写数据会将数据的前24位(int数据共32位,写后8位的byte)丢掉,会有问题。