2019-06-01 Java学习日记 day22 io其他流

序列流

  序列流可以把多个字节输入流整合一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个之后继续读第二个,以此类推

使用方法

  *整合两个: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 ( )

猜你喜欢

转载自www.cnblogs.com/JungTan0113/p/10961637.html