一、序列流(SequenceInputStream)
序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读,
读完一个之后继续读第二个, 以此类推
使用方式
整合两个: SequenceInputStream(InputStream, InputStream)
整合多个: SequenceInputStream(Enumeration)
二、内存输出流(ByteArrayOutputStream)
该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
使用方式
创建对象: new ByteArrayOutputStream()
写出数据: write(int), write(byte[])
获取数据: toByteArray()
三、对象操作流(ObjectOutputStream,ObjectInputStream)
该流可以将一个对象写出, 或者读取一个对象到程序中. 也就是执行了序列化和反序列化的操作.
使用方式
写出: new ObjectOutputStream(OutputStream), writeObject()
读取: new ObjectInputStream(InputStream), readObject()
四、标准输入输出流
System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
修改标准输入输出流
修改输入流: System.setIn(InputStream)
修改输出流: System.setOut(PrintStream)
五、随机访问流
RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。
支持对随机访问文件的读取和写入。
read(),write(),seek()
六、数据输入输出流
DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据
例如按Long大小写出一个数字, 写出时该数据占8字节. 读取的时候也可以按照Long类型读取, 一次读取8个字节
七、Properties
Properties 类表示了一个持久的属性集。
Properties 可保存在流中或从流中加载。
属性列表中每个键及其对应值都是一个字符串。
package com.lin.otherio; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.io.RandomAccessFile; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; import java.util.Vector; public class OtherIO { public static void main(String[] args) throws IOException, ClassNotFoundException { /* * 一、序列流(SequenceInputStream) 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 使用方式 整合两个: SequenceInputStream(InputStream, InputStream) 整合多个: SequenceInputStream(Enumeration) 二、内存输出流(ByteArrayOutputStream) 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据 使用方式 创建对象: new ByteArrayOutputStream() 写出数据: write(int), write(byte[]) 获取数据: toByteArray() 三、对象操作流(ObjectOutputStream,ObjectInputStream) 该流可以将一个对象写出, 或者读取一个对象到程序中. 也就是执行了序列化和反序列化的操作. 使用方式 写出: new ObjectOutputStream(OutputStream), writeObject() 读取: new ObjectInputStream(InputStream), readObject() 四、标准输入输出流 System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据 System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 修改标准输入输出流 修改输入流: System.setIn(InputStream) 修改输出流: System.setOut(PrintStream) 五、随机访问流 RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。 支持对随机访问文件的读取和写入。 read(),write(),seek() 六、数据输入输出流 DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据 例如按Long大小写出一个数字, 写出时该数据占8字节. 读取的时候也可以按照Long类型读取, 一次读取8个字节 七、Properties Properties 类表示了一个持久的属性集。 Properties 可保存在流中或从流中加载。 属性列表中每个键及其对应值都是一个字符串。 * */ sequenceStream();//SequenceInputStream序列流(仅有两个输入流) sequenceStreamMore();//SequenceInputStream序列流(多个输入流) memoryStream();//内存输出流 objectOutStream();//对象操作流 objectInStream();//对象操作流 objectStream();//对象操作流 printStream();//打印流 // systemIn(); // systemInAndOut(); // keyBorder();//键盘录入 randomStream();//随机访问流(既读又可写) dataStream(); properties1(); properties2(); } private static void properties2() throws IOException, IOException { System.out.println("================Properties配置文件================"); Properties p = new Properties(); p.load(new FileInputStream("config.properties")); p.setProperty("tel", "18898568956"); p.store(new FileOutputStream("config.properties"), null); System.out.println(p); } private static void properties1() { System.out.println("================Properties================"); Properties p = new Properties(); // p.put("abc", 123); // System.out.println(p); p.setProperty("name", "三"); p.setProperty("tel", "13233888956"); Enumeration<String> e = (Enumeration<String>) p.propertyNames(); while(e.hasMoreElements()){ String key = e.nextElement(); System.out.println(key + "--" + p.getProperty(key)); } } private static void dataStream() throws IOException { DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt")); dos.writeInt(997); dos.writeInt(998); dos.writeInt(999); dos.close(); DataInputStream dis = new DataInputStream(new FileInputStream("a.txt")); System.out.println(dis.readInt() + " " + dis.readInt() + " " + dis.readInt() + " "); } private static void randomStream() throws IOException { System.out.println("================随机访问流================"); RandomAccessFile ra = new RandomAccessFile("a.txt", "rw"); ra.write(97); System.out.println(ra.read()); ra.seek(10); ra.write(98); ra.close(); } private static void keyBorder() throws IOException { System.out.println("================键盘录入================"); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String line = bf.readLine(); System.out.println(line); bf.close(); } private static void systemInAndOut() throws IOException { System.out.println("================标准输入输出================"); System.setIn(new FileInputStream("a.txt")); System.setOut(new PrintStream("b.txt")); InputStream is = System.in; PrintStream ps = System.out; int b; while((b = is.read()) != -1){ ps.write(b); } is.close(); ps.close(); } private static void systemIn() throws IOException { System.out.println("================标准输入流================"); InputStream is = System.in; int x = is.read(); System.out.println(x); is.close(); } private static void printStream() throws FileNotFoundException { System.out.println("================打印流================"); PrintStream ps = System.out;//打印字节流 ps.println(97); //其实底层用的是Integer.toString(x),将x转换为数字字符串打印 ps.println("xxx"); ps.println(new Person("张三", 23)); Person p = null; ps.println(p); //如果是null,就返回null,如果不是null,就调用对象的toString() PrintWriter pw = new PrintWriter(new FileOutputStream("g.txt"), true);//打印字符流 pw.write(97); pw.print("大家好"); pw.println("你好"); //自动刷出,只针对的是println方法 pw.close(); } private static void objectStream() throws IOException, IOException, ClassNotFoundException { System.out.println("================对象操作流================"); Person p1 = new Person("张三",18); Person p2 = new Person("李四",16); Person p3 = new Person("王五",18); Person p4 = new Person("赵六",16); ArrayList<Person> list = new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt")); oos.writeObject(list); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.txt")); ArrayList<Person> pList = (ArrayList)ois.readObject(); for (Person person : pList) { System.out.println(person); } } private static void objectInStream() throws IOException, ClassNotFoundException { System.out.println("================对象操作流读取================"); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c.txt")); Person p1 = (Person)ois.readObject(); Person p2 = (Person)ois.readObject(); // Person p3 = (Person)ois.readObject();//java.io.EOFException 文件读取到末尾了出现 System.out.println(p1); System.out.println(p2); } private static void objectOutStream() throws IOException { Person p1 = new Person("张三",18); Person p2 = new Person("李四",16); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c.txt")); oos.writeObject(p1); oos.writeObject(p2); oos.close(); } private static void memoryStream() throws IOException { System.out.println("================内存输出流================"); FileInputStream fi2 = new FileInputStream("b.txt"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int b; while((b = fi2.read()) != -1){ bos.write(b); } // byte[] by = bos.toByteArray(); // System.out.println(new String(by)); System.out.println(bos); fi2.close(); } public static void sequenceStreamMore() throws FileNotFoundException, IOException { System.out.println("================序列流多个输入流================"); FileInputStream fi1 = new FileInputStream("a.txt"); FileInputStream fi2 = new FileInputStream("b.txt"); FileInputStream fi3 = new FileInputStream("c.txt"); Vector<FileInputStream> v = new Vector<>(); v.add(fi1); v.add(fi2); v.add(fi3); Enumeration<FileInputStream> en = v.elements(); SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fo = new FileOutputStream("bc.txt"); int b; while((b = sis.read()) != -1){ fo.write(b); } sis.close(); fo.close(); } public static void sequenceStream() throws FileNotFoundException, IOException { System.out.println("================序列流两个输入流================"); FileInputStream fi1 = new FileInputStream("b.txt"); FileInputStream fi2 = new FileInputStream("c.txt"); SequenceInputStream si = new SequenceInputStream(fi1, fi2); FileOutputStream fo = new FileOutputStream("bc.txt"); int b; while((b = si.read()) != -1){ fo.write(b); } si.close(); fo.close(); } }