在之前用过了文件操作实现了针对于文件数据的输入与输出操作,但是如果说现在某一应用,需要进行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));
}
}
网友评论