一、在java中内存流一共分为两组
字节内存流:ByteArrayInputStream、ByteArrayOutputStream;
字符内存流:CharArrayWriter、CharArrayReader;
使用的字节内存流,说明一下
1、 以文件操作为例,是以文件作为终端的,以电脑作为输入端和输出端
(1)输出的时候:程序利用OutputStream输出,输出到文件。
(2)读取的时候:程序利用InputStream从文件中读取。
2、以内存操作为例,以内存作为终端。
(1)程序通过InputStream把内容给内存。
(2)程序要想从内存中取出来可以通过OutputStream把内容从内存中读取出来。
下面来观察一下构造方法。
1、 ByteArrayInputStream类构造:public ByteArrayInputStream(byte[] buf);
此处相当于告诉ByteArrayInputStream,你实例化好之后就有了一些数据,这些数据是程序给的。
2、ByteArrayOutputStream类构造:public ByteArrayOutputStream();
范例:实现内存流操作
package lisy;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
String str = "Hello MLDN! Very Good";//希望实现小写操作
//将所有的数据保存在内存流之中,利用ByteArrayInputStream保存
InputStream input = new ByteArrayInputStream(str.getBytes());
//如果要通过内存读取数据,使用的是ByteArrayOutputStream
OutputStream output = new ByteArrayOutputStream();//用了向上转型
//Character类提供了转大写或小写的方法:public static int toLowerCase(int codePoint)
int temp = 0;//保存每次读取进来的字节数据
while((temp = input.read()) != -1) {
output.write(Character.toLowerCase(temp));
}
System.out.println(output);
input.close();
output.close();
}
}
在此操作过程之中发生了IO执行,但是没有文件的产生。
二、深入观察(ByteArrayOutputStream)
正常来讲肯定是子类为父类进行实例化操作,而后利用父类对象根据父类标准进行IO操作。例如:OutputStream、
InputStream类的方法就是write()方法和read()方法。但是也需要知道所有的子类都是有自己方法扩充的。
1、在ByteArrayOutputStream类中提供有一个public byte[]toByteArray()
这个方法是将全部保存在内存输出的数据取出变为字节数组保存。
范例:实现将文件的合并到另一个文件中,并同时将这两个文件中的全部内容变成大写字后保存
package lisy;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
String fileNames[] = new String[] {"msga.txt","msgb.txt"};
for(int x = 0;x< fileNames.length;x++) {
InputStream input = new FileInputStream("E:"+File.separator+fileNames[x]);
int temp = 0;
while((temp=input.read())!=-1) {
bos.write(temp);//内存中保存
}
input.close();
}
OutputStream output = new FileOutputStream("E:"+File.separator+"msg.txt");
output.write(new String(bos.toByteArray()).toUpperCase().getBytes());
output.close();
bos.close();
}
}