内存流

在之前用过了文件操作实现了针对于文件数据的输入与输出操作,但是如果说现在某一应用,需要进行IO操作,但是不生成文件,就可以使用内存来实现输入与输出的操作。
对于内存流,java.io包里面提供了两组操作:

  • 字节内存流:ByteArrayInputStream、ByteArrayOutputStream
  • 字符内存流:CharArrayReader 、CharArrayWriter
    以下是以字节内存流操作为主;重点看一下ByteArrayInputStream、ByteArrayOutputStream的继承结构与构造方法:
    1367514-bc5feed234880190.png

下面为了更好的说明出问题,特别做一个举例:

  • 以文件操作为例:
    |- 输出(OutputStream):程序 → OutputStream → 文件;
    |- 输入(InputStream):程序 ← InputStream ← 文件;
  • 以内存操作为例:
    |- 输出(InputStream):程序 → OutputStream → 内存;
    |- 输入(InputStream):程序 ← OutputStream ← 内存;

范例:实现一个小写字母转换大写字母

- public static char toLowerCase(char ch)
- public static int toLowerCase(int codePoint)
- public static char toUpperCase(char ch)
- public static int toUpperCase(int codePoint)

代码如下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MemoryStream {
    public static void main(String[] args) throws IOException{
        String str = "Hello World ~ !";
        InputStream input = new ByteArrayInputStream(str.getBytes());
        OutputStream output = new ByteArrayOutputStream();
        int temp = 0 ;
        while ((temp = input.read()) != -1) {
            output.write(Character.toUpperCase(temp));
        }
        System.out.println(output);
        input.close();
        output.close();
    }
}

以上的代码里面,所有的输出流、输入流都发生了向上转型。在ByteArrayOutputStream类里面有一个重要的方法:public byte[] toByteArray(),这个方法可以将所有的保存在内存中的字节数据变为字节数组存在,可以实现多个文件的同时读取
范例:实现文件的合并读取

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

/**
 * @author liuwq
 * 实现多个文件同时输出
 */
public class FilesMerge {
    public static void main(String[] args) throws IOException{
        File file1 = new File("D:" + File.separator + "Document" 
                + File.separator + "Document" + File.separator + "test1.txt");
        File file2 = new File("D:" + File.separator + "Document" 
                + File.separator + "Document" + File.separator + "test2.txt");
        
        InputStream input1 = new FileInputStream(file1);
        InputStream input2 = new FileInputStream(file2);
        
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        
        int temp = 0;
        while ((temp = input1.read()) != -1) {
            output.write(temp);
        }
        while ((temp = input2.read()) != -1) {
            output.write(temp);
        }
        
        byte[] data = output.toByteArray();
        
        output.close();
        input1.close();
        input2.close();
        System.out.println(new String(data));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值