美文网首页
*内存流(包含文件操作示例图)

*内存流(包含文件操作示例图)

作者: 秋笙fine | 来源:发表于2019-01-30 16:49 被阅读0次

可以使用内存流实现IO操作。
在之前使用过了文件操作流实现了对于文件数据的输入和输出操作,但是如果现在某一种应用需要进行IO操作,可是又不想产生文件的时候,就可以利用内存来实现输入和输出的操作。针对于内存流,java.io包提供了两组操作。
字节内存流:ByteArrayInputStream,ByteArrayOutputStream
字符内存流:CharArrayReader,CharArrayWriter

本次是以字节内存流操作为主。下面来看一下
ByteArrayInputStream,ByteArrayOutputStream继承结构和构造方法:
ByteArrayInputStream:
继承结构:
java.lang.Object
java.io.InputStream
java.io.ByteArrayInputStream
构造方法:
public ByteArrayInputStream(byte[] buf)
表示将要操作的数据设置到输入流

ByteArrayOutputStream:
继承结构:
java.lang.Object
java.io.OutputStream
java.io.ByteArrayOutputStream
构造方法:
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)

  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循环,所有数据都会保存在内存输出流对象中
        while((temp=input.read())!=-1){//每次读取一个数据
            output.write(Character.toUpperCase(temp));//字节输出流
        }
        System.out.println(output);//调用toString方法
        input.close();
        output.close();
    }

成功了


image.png

以上的操作代码里,所有的输入和输出流都发生了向上转型,向上转型的好处是类型统一,但是我们别忘了,每一个子类都有每一个子类自己的功能。
public byte[] toByteArray();
ByteArrayOutputStream这个方法可以将内存中的字节数据化为字节数组。

利用这个ByteArrayOutputStream的子类方法可以实现多个文件的同时读取。

范例;实现文件的合并读取

   public static void main(String[] args) throws Exception{
        File fileA=new File("e:"+File.separator+"infoa.txt");
        File fileB=new File("e:"+File.separator+"infob.txt");
        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));
    }

使用内存输出流同时读取了文件a.txt和b.txt

总结:

内存操作流,短期内不会使用,需要结合一些具体的案例才可以更好的理解。

相关文章

  • *内存流(包含文件操作示例图)

    可以使用内存流实现IO操作。在之前使用过了文件操作流实现了对于文件数据的输入和输出操作,但是如果现在某一种应用需要...

  • java基础io流——配角也风流(不求甚解)

    本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理...

  • java nio学习笔记(2)之内存映射文件

    概念 内存映射文件是将文件(部分)内容映射到内存中,读写操作都在内存中完成,最后再写回文件 示例 该程序是将文件整...

  • Shell脚本语言:文件包含、cat命令、获取用户输入(5)

    一、文件包含:1、文件B包含文件A:示例代码: 2、文件B包含文件A:示例代码: 二、cat命令: 作用: 语法:...

  • MongoDB Java基本操作

    示例包含2个类文件, 1个操作枚举,1个帮助类. Maven 引用 枚举 帮助类 使用示例

  • python 文件,文件夹操作全面解析

    操作文件 mode的说明image.png 读写文件 打开多个文件 flush方法 一般的文件流操作都包含缓冲机制...

  • Python的IO编程一

    一、重要概念流 1.从磁盘读取文件到内存就只有input操作,把数据写到文件里就只有output操作。2.流只能单...

  • python: flush

    flush 简介 来自 【python】对文件操作flush的一个理解 的简介: 一般的文件流操作都包含缓冲机制...

  • 第三篇:戏说C++文件I/O (前篇)

    本篇会讲述文件流的详细操作和实际开发中碰到的一些典型问题 文件写入操作 append写入模式以下示例打开一个文件且...

  • Java之IO流

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

网友评论

      本文标题:*内存流(包含文件操作示例图)

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