上一篇:教你用不同的编码标准解码字符 | 带你学《Java语言高级特性》之六十
文件操作流能够实现对文件内容的读写操作,若是碰到了不希望产生文件的IO操作,显然是不能实现的,此时就需要用到内存操作流程。本节将为读者介绍内存操作流的相关知识。
【本节目标】
通过阅读本节内容,你将进一步了解到IO流操作的过程,了解到内存操作流相关类的继承体系,并能够借助这些类实现以内存为终端的IO操作。
内存操作流
在之前使用的全部都是文件操作流,文件操作流的特点:程序利用InputStream读取文件内容,而后程序利用OutputStream向文件输出内容,所有的操作都是以文件为终端的。
文件流
假设说现在需要实现IO操作,可是又不希望产生文件(临时文件),则就可以以内存为终端进行处理,这个时候的流程为:
内存流
在Java里面提供有两类的内存操作流:
- 字节内存操作流:ByteArrayOutputStream、ByteArrayInputStream
- 字符内存操作流:CharArrayWriter、CharArrayReader
ByteArrayOutputStream
ByteArrayInputStream
CharArrayWriter
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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学