内存流

2018-07-21  本文已影响38人  落在牛背上的鸟

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

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

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

- 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));
    }
}
上一篇 下一篇

猜你喜欢

热点阅读