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

来源:互联网 发布:打击垫 编程 编辑:程序博客网 时间:2024/04/29 19:55

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

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

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


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

名称 ByteArrayInputStream ByteArrayOutputStream 继承结构 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));    }}
0 0
原创粉丝点击