*内存流(包含文件操作示例图)

可以使用内存流实现IO操作。
在之前使用过了文件操作流实现了对于文件数据的输入和输出操作,但是如果现在某一种应用需要进行IO操作,可是又不想产生文件的时候,就可以利用内存来实现输入和输出的操作。针对于内存流,java.io包提供了两组操作。
字节内存流:ByteArrayInputStream,ByteArrayOutputStream
字符内存流:CharArrayReader,CharArrayWriter

本次是以字节内存流操作为主。下面来看一下
ByteArrayInputStream,ByteArrayOutputStream继承结构和构造方法:
ByteArrayInputStream:
继承结构:
java.lang.Object
java.io.InputStream
java.io.ByteArrayInputStream
构造方法:
public ByteArrayInputStream(byte[] buf)
表示将要操作的数据设置到输入流

ByteArrayOutputStream:
继承结构:
java.lang.Object
java.io.OutputStream
java.io.ByteArrayOutputStream
构造方法:
public ByteArrayOutputStream()
从内存输出数据

文件操作:
输出(OutputStream):程序->outputStream->文件
输入(InputStream):程序<-InputStream<-文件

内存操作:
输出(InputStream):程序->InputStream->内存
输入(OutputStream):程序<-OutputStream<-内存

范例:实现一个小写字母转大写字母的操作
为了方便实现字母转大写,可以借助于Character类:
public static char toLowerCase(char ch);
public static int toLowerCase(int codePoint)
public static char toUpperCase(char ch);
public static int toUpperCase(int codePoint)

  public static void main(String[] args) throws Exception{
        String str="Hello world!!";//要转换的字符
        //本次要使用内存流实现转换,要将数据先保存在内存里面,而后从内存里面取出每一个数据

        //将所有要读取的数据设置到内存输入流之中,本次采用向上转型
        InputStream input=new ByteArrayInputStream(str.getBytes());
        //为了能够将所有的内存流数据取出 使用ByteArrayOutputStream
        OutputStream output=new ByteArrayOutputStream();

        int temp=0;//读取每一个字节数据
        //经过此次while循环,所有数据都会保存在内存输出流对象中
        while((temp=input.read())!=-1){//每次读取一个数据
            output.write(Character.toUpperCase(temp));//字节输出流
        }
        System.out.println(output);//调用toString方法
        input.close();
        output.close();
    }

成功了


image.png

以上的操作代码里,所有的输入和输出流都发生了向上转型,向上转型的好处是类型统一,但是我们别忘了,每一个子类都有每一个子类自己的功能。
public byte[] toByteArray();
ByteArrayOutputStream这个方法可以将内存中的字节数据化为字节数组。

利用这个ByteArrayOutputStream的子类方法可以实现多个文件的同时读取。

范例;实现文件的合并读取

   public static void main(String[] args) throws Exception{
        File fileA=new File("e:"+File.separator+"infoa.txt");
        File fileB=new File("e:"+File.separator+"infob.txt");
        InputStream inputA=new FileInputStream(fileA);
        InputStream inputB=new FileInputStream(fileB);
        ByteArrayOutputStream output=new ByteArrayOutputStream();

        int temp=0;//每次读取一个数据
        while((temp=inputA.read())!=-1){
            output.write(temp);
        }
        while((temp=inputB.read())!=-1){
            output.write(temp);
        }
        //现在所有的内容都保存在了内存输出流里,所有的内容都变成字节数组取出。
        byte data[]=output.toByteArray();
        output.close();
        inputA.close();
        inputB.close();
        System.out.println(new String(data));
    }

使用内存输出流同时读取了文件a.txt和b.txt

总结:

内存操作流,短期内不会使用,需要结合一些具体的案例才可以更好的理解。

你可能感兴趣的:(*内存流(包含文件操作示例图))