java中的内存流学习总结

一、在java中内存流一共分为两组

  • 字节内存流:ByteArrayInputStream、ByteArrayOutputStream;

  • 字符内存流:CharArrayWriter、CharArrayReader;

使用的字节内存流,说明一下

1、 以文件操作为例,是以文件作为终端的,以电脑作为输入端和输出端
(1)输出的时候:程序利用OutputStream输出,输出到文件。
(2)读取的时候:程序利用InputStream从文件中读取。
2、以内存操作为例,以内存作为终端。
(1)程序通过InputStream把内容给内存。
(2)程序要想从内存中取出来可以通过OutputStream把内容从内存中读取出来。

下面来观察一下构造方法。

1、 ByteArrayInputStream类构造:public ByteArrayInputStream(byte[] buf);
此处相当于告诉ByteArrayInputStream,你实例化好之后就有了一些数据,这些数据是程序给的。
2、ByteArrayOutputStream类构造:public ByteArrayOutputStream();

范例:实现内存流操作

package lisy;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        String str = "Hello MLDN! Very Good";//希望实现小写操作
        //将所有的数据保存在内存流之中,利用ByteArrayInputStream保存
        InputStream input = new ByteArrayInputStream(str.getBytes());
        //如果要通过内存读取数据,使用的是ByteArrayOutputStream
        OutputStream output = new ByteArrayOutputStream();//用了向上转型
        //Character类提供了转大写或小写的方法:public static int toLowerCase(int codePoint)
        int temp = 0;//保存每次读取进来的字节数据
        while((temp = input.read()) != -1) {
            output.write(Character.toLowerCase(temp));
        }
        System.out.println(output);
        input.close();
        output.close();
    }
}

在此操作过程之中发生了IO执行,但是没有文件的产生。

二、深入观察(ByteArrayOutputStream)

正常来讲肯定是子类为父类进行实例化操作,而后利用父类对象根据父类标准进行IO操作。例如:OutputStream、

InputStream类的方法就是write()方法和read()方法。但是也需要知道所有的子类都是有自己方法扩充的。

1、在ByteArrayOutputStream类中提供有一个public byte[]toByteArray()

这个方法是将全部保存在内存输出的数据取出变为字节数组保存。

范例:实现将文件的合并到另一个文件中,并同时将这两个文件中的全部内容变成大写字后保存

package lisy;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyDemo {
    public static void main(String[] args) throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        String fileNames[] = new String[] {"msga.txt","msgb.txt"};
        for(int x = 0;x< fileNames.length;x++) {
            InputStream input = new FileInputStream("E:"+File.separator+fileNames[x]);
            int temp = 0;
            while((temp=input.read())!=-1) {
                bos.write(temp);//内存中保存
            }
            input.close();
        }
        OutputStream output = new FileOutputStream("E:"+File.separator+"msg.txt");
        output.write(new String(bos.toByteArray()).toUpperCase().getBytes());
        output.close();
        bos.close();

    }
}

猜你喜欢

转载自blog.csdn.net/qq_41112517/article/details/80358778
今日推荐