内存流

作者: 落在牛背上的鸟 | 来源:发表于2018-07-21 18:57 被阅读38次

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

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

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

  • 以文件操作为例:
    |- 输出(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));
    }
}

相关文章

  • 内存流

    在之前用过了文件操作实现了针对于文件数据的输入与输出操作,但是如果说现在某一应用,需要进行IO操作,但是不生成文件...

  • 内存流

    我们已经看到,标准I/O库把数据缓存在内存中,因此每次一字符 和每次一行的I/O更有效。我们也可以通过调用setb...

  • IO流之 内存输出流

    内存输出流 什么是内存输出流 该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后可以一次性获取所有数据。 ...

  • 第九讲 文件操作

    File 输入和输出流是相对于内存来说的:写入内存叫做输入流,从内存写到文件叫输出流。

  • JavaSE总结(9)IO流(1)

    一、IO流: IO流: input输入(流向内存) 读取数据 output输出(流出内存) 写出数据 IO...

  • java——IO_文件输入流和输出流

    输入流和输出流(站在程序的角度思考问题)-----文件-->内存(输入流) 内存--->界面信息(输出流) 用输入...

  • JAVA-IO流的理解

    1.输入流和输出流的方向是相对于内存来说的,从文件/网络等到内存方向的流称为输入流,反之为输出流。2.I/O流根据...

  • Java之IO流

    在【内存】的角度:输入流:将数据从硬盘读到内存中输出流:将数据从内存写到硬盘文件中 从流操作数据时采用的单位,分为...

  • IO操作

    一、什么是IO流I:就是input 、O:就是output ,故称:输入输出流。将数据读入内存或者内存输出的过程常...

  • ofstream的使用方法

    ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存...

网友评论

      本文标题:内存流

      本文链接:https://www.haomeiwen.com/subject/fgmhmftx.html