序列流
序列流可以把多个字节输入流整合一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个之后继续读第二个,以此类推
使用方法
*整合两个:SequenceInputStream(InputStream,InputSream)
public class demo1_SequenceInputStream { public static void main(String[] args) throws IOException { //demo1(); FileInputStream fis1 =new FileInputStream("a.txt"); FileInputStream fis2 =new FileInputStream("b.txt"); SequenceInputStream sis =new SequenceInputStream(fis1,fis2); FileOutputStream fos =new FileOutputStream("c.txt"); int b; while((b =sis.read()) != -1){ fos.write(b); } sis.close(); //在庀的时候,会将构造方法重传入的流对象也都关闭 fos.close(); } public static void demo1() throws FileNotFoundException, IOException { FileInputStream fis1 =new FileInputStream("a.txt");//输入流 FileOutputStream fos =new FileOutputStream("c.txt");//输出流 int b; while((b =fis1.read()) != -1){ //不断的在a.txt上读取字节 fos.write(b); //将读到的字节写到c.txt上 } fis1.close(); //关闭字节输入流 FileInputStream fis2 =new FileInputStream("b.txt"); int b2; while((b2 =fis2.read()) != -1){ fos.write(b2); } fis2.close(); fos.close(); } }
整合多个输入流
FileInputStream fis1 =new FileInputStream("a.txt"); FileInputStream fis2 =new FileInputStream("b.txt"); FileInputStream fis3 =new FileInputStream("c.txt"); Vector<FileInputStream> v= new Vector<>(); //创建集合对象 v.add(fis1); //将流对象存储进来 v.add(fis2); v.add(fis3); Enumeration<FileInputStream> en =v.elements(); SequenceInputStream sis =new SequenceInputStream(en); //将枚举整合起来 FileOutputStream fos =new FileOutputStream("d.txt"); int b; while((b=sis.read()) != -1){ fos.write(b); } sis.close(); fos.close();
内存输出流
该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后可以一次性获取所有数据
使用方式
创建对象:new ByteArrayOutputStream()
写出数据:write(int),write(byte [ ])
获取数据:toByteArray()
public class demo2_ByteArrayOutputStream { public static void main(String[] args) throws IOException { //demo1(); FileInputStream fis1=new FileInputStream("e.txt"); ByteArrayOutputStream baos =new ByteArrayOutputStream(); int b; while((b =fis1.read()) != -1){ baos.write(b); } byte []arr =baos.toByteArray(); System.out.println(new String(arr)); System.out.println(baos.toString()); fis1.close(); } public static void demo1() throws FileNotFoundException, IOException { FileInputStream fis1=new FileInputStream("e.txt"); byte [] arr =new byte[3]; int len; while ((len =fis1.read(arr)) != -1) { System.out.println(new String(arr, 0, len)); } fis1.close(); } }
public class test1 { public static void main(String[] args) throws IOException { FileInputStream fis =new FileInputStream("a.txt"); ByteArrayOutputStream baos =new ByteArrayOutputStream(); //创建字节数组,长度为5 byte [] arr =new byte[5]; int len; while((len =fis.read(arr)) != -1){ baos.write(arr,0,len); } //将内存输出流的数据全部转换为字符串打印 System.out.println(baos); //关闭输入流 fis.close(); } }
随机访问流
RandomAccessFile类不属于流,是object类的子类,但它融合了InputStream的功能
支持岁随机访问的读取和写入
read() write() seek()
public class demo3_RandomAccessFile { public static void main(String[] args) throws IOException { RandomAccessFile raf =new RandomAccessFile("g.txt", "rw"); //raf.write(97); //int x =raf.read(); //System.out.println(x); raf.seek(1); //在指定位置设置指针 raf.write(98); raf.close(); } }
对象操作流 ObjectOutPutStream
该流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作
使用方式
写出:new ObjectOutPutStream(OutputStream),writeObject ( )