outputStream,InputStream这个文件一定会被创建,需要发生IO处理,但是又不希望产生文件,可以使用内存作为操作的终端,内存操作流比较麻烦,也包含内存字节流、内存字符流。字节内存流:ByteArrayInputStream ByteArrayOutputStream字符内存流:CharArrayReaderCharArrayWriter有一个小小的问题,以文件读为例,每次读满数组,之后考虑别的。通过内存流,实现一个大小写做转换大操作。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;public class CopyTest {
public static void main(String[] args) throws Exception {
String msg = "hello World";
// 实例化InputStream类对象,实例化的时候需要将你操作的数据保存到内存之中,最终你读取的就是你设置的内容。
InputStream input = new ByteArrayInputStream(msg.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();
}
}
文件合并,两个文件的OUtputStream数据都可以保存在程序内,利用这一特征将文件合并。如果要读取文件,最好是读取File 对象。如果只传文件名称。名称就要在签名声明上文件的目录利用内存流读数据 开辟一个内存流不产生内存文件,有IO,但是没有文件,让这个数据一次性全部读取出来。ByteArrayOutputStream类中有一个“头ByteArray方法,public byte[] toByteArray()表示将所有读取到了byteArray中的数据,都用字节数组输出出来。
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class CopyTest{
public static void main(String[] args) throws Exception {
File file[] =new File[] {
new File("d:"+File.separator+"dataa.txt"),
new File("d:"+File.separator+"datab.txt")
};
System.out.println(readFile(file[0])+readFile(file[1]));
String data[]=new String[2];
for (int i = 0; i < file.length; i++) {
data[i]=readFile(file[i]);
}
StringBuffer buf=new StringBuffer();
String contentA[]= data[0].split(" ");
String contentB[]= data[1].split(" ");
for(int i=0;i<contentA.length;i++) {
buf.append(contentA[i]).append("(").append(contentB[i]).append(")").append(" ");
}
System.out.println(buf);
}
public static String readFile(File file) throws Exception{
if(file.exists()) {
InputStream input=new FileInputStream(file);//toByteArray 是子类扩充的方法。
ByteArrayOutputStream bos=new ByteArrayOutputStream();
byte data[]=new byte[10];
int temp=0;
while((temp = input.read(data))!=-1) {//内容都在内存流中
bos.write(data,0,temp);
}
bos.close();
input.close();
return new String(bos.toByteArray());//将读取的内容返回
}
return null;
}
}
内存流最大的好处,如果只是使用INputStream类,在进行数据读取的时
候,会存在缺陷,而结合内存流的操作就会好很多,但是目前而言使用很少。