Java学习提要——IO操作的内存流

有一个应用需要进行IO操作,可是又不想产生文件。我们就可以使用内存来进行输入与输出的操作——使用内存流的场景

java.io包里提供两组操作:

字节内存流:ByteArrayInputStream、ByteAttayOutputStream
字符内存流:CharArrayReader、CharArrayWriter


本文主要以字节内存流操作为例子,两个操作其实没什么区别

名称ByteArrayInputStreamByteArrayOutputStream
继承结构java.lang.Object
-java.io.InputStream
–java.io.ByteArrayInputStream
java.lang.Object
-java.io.OutputStream
–java.io.ByteArrayOutputStream
构造方法public ByteArrayInputStream(byte[] buf)
表示将要操作的数据设置到输入流
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)

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

public class Nice {
    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((temp = input.read()) != -1) {  //每一次读取一个数据
        output.write(Character.toUpperCase(temp));  //字节输出流
        }
        System.out.println(output);  //调用toString()方法
        input.close();
        output.close();
    }
}

注意!在ByteArrayOutputStream类里面有一个重要的方法:public byte[] toByteArray()
这个方法可以将所有保存在内存中的字节数据变为字节数组存在

//利用ByteArrayOutputStream,可以实现多个文件的同时读取
//实现文件的合并读取,(假设已经创建两个文件infoa,infob)
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class Nice {
    public static void main(String[] args) throws Exception{
        File fileA = new File("文件路径");
        File fileB = new File("文件路径");
        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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值