运用内存操作流实现IO操作 | 带你学《Java语言高级特性》之六十一

简介: 文件操作流能够实现对文件内容的读写操作,若是碰到了不希望产生文件的IO操作,显然是不能实现的,此时就需要用到内存操作流程。本节将为读者介绍内存操作流的相关知识。

上一篇:教你用不同的编码标准解码字符 | 带你学《Java语言高级特性》之六十
文件操作流能够实现对文件内容的读写操作,若是碰到了不希望产生文件的IO操作,显然是不能实现的,此时就需要用到内存操作流程。本节将为读者介绍内存操作流的相关知识。

【本节目标】
通过阅读本节内容,你将进一步了解到IO流操作的过程,了解到内存操作流相关类的继承体系,并能够借助这些类实现以内存为终端的IO操作。

内存操作流

在之前使用的全部都是文件操作流,文件操作流的特点:程序利用InputStream读取文件内容,而后程序利用OutputStream向文件输出内容,所有的操作都是以文件为终端的。

image.png
文件流

假设说现在需要实现IO操作,可是又不希望产生文件(临时文件),则就可以以内存为终端进行处理,这个时候的流程为:

image.png内存流

在Java里面提供有两类的内存操作流:

  • 字节内存操作流:ByteArrayOutputStream、ByteArrayInputStream
  • 字符内存操作流:CharArrayWriter、CharArrayReader

image.png
ByteArrayOutputStream

image.png
ByteArrayInputStream

image.png
CharArrayWriter

image.png
CharArrayReader

下面以ByteArrayOutputStream和ByteArrayInputStream类为主进行内存的使用分析,首先分析各自的构造方法:

ByteArrayInputStream构造:public ByteArrayInputStream(byte[] buf);
ByteArrayOutputStream构造:public ByteArrayOutputStream();

在ByteArrayOutputStream类里面有两个重要的方法,这些方法可以获取全部保存在内存流中的数据信息,该方法为:

获取数据:public byte[] toByteArray();
使用字符串的形式获取:public String toString();

范例:利用内存流实现一个小写字母转大写字母的操作

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        String str="www.mldn.cn";   //小写字母
        InputStream input=new ByteArrayInputStream(str.getBytes());   //将数据保存到内存流
        OutputStream output=new ByteArrayOutputStream();//读取内存中的数据
        int data = 0;
        while ((data = input.read())!= -1){   //每次读取一个字节
            output.write(Character.toUpperCase((char)data));  //保存数据
        }
        System.out.println(output);  //WWW.MLDN.CN
        input.close();
        output.close();
    }
}

如果不希望只是以字符串的形式返回,因为可能存放的是其它二进制的数据,那么此时就可以利用ByteArrayOutputStream子类的扩展功能获取全部字节数据。

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        String str="www.mldn.cn";
        InputStream input=new ByteArrayInputStream(str.getBytes());//将数据保存在内存流
        //必须使用子类来调用子类自己的扩展方法
        ByteArrayOutputStream output=new ByteArrayOutputStream();//读取内存中的数据
        int data=0;
        while ((data=input.read())!= -1){//每次读取一个字节
            output.write(Character.toUpperCase((char)data));//保存数据
        }
        byte result []=output.toByteArray(); //获取全部数据
        System.out.println(new String(result));   //自己处理字节数据,结果:WWW.MLDN.CN
        input.close();
        output.close();
    }
}

在最初的时候,可以利用ByteArrayOutputStream实现大规模文本文件读取。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:使用管道流构建线程信息通道 | 带你学《Java语言高级特性》之六十二
更多Java面向对象编程文章查看此处

相关文章
|
10天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0
|
15天前
|
Java Unix Windows
|
10天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
23 0
|
1天前
|
数据采集 异构计算
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
LabVIEW编程LabVIEW开发高级数据采集技术 操作数字IO 例程与相关资料
36 22
|
2天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
8 0
|
4天前
|
存储 缓存 Java
Java IO 流详解
Java IO 流详解
13 1
|
8天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
12 2
|
8天前
|
存储 Java
Java的`java.io`包包含多种输入输出类
Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
16 1
|
9天前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
20 2
|
10天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis