黑马程序员技术交流社区
标题:
字节输入输出流缓冲区共享问题
[打印本页]
作者:
开弓没有回头箭
时间:
2015-5-31 10:29
标题:
字节输入输出流缓冲区共享问题
本帖最后由 开弓没有回头箭 于 2015-5-31 10:48 编辑
在同一个类中,同时创建了多个字节输入流缓冲区对象与多个字节输入流缓冲对象,它们的缓冲区是共享的,用的都是一个缓冲区,用下面程序得到证明:
一个输入缓冲区对象对多个输出缓冲区对象:
import java.io.*;
class test1
{
public static void main(String[] args)throws IOException
{
copy();
}
public static void copy()throws IOException
{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("in.txt"));//建立一个字节流输入缓冲区
BufferedOutputStream bufos1 = new BufferedOutputStream(new FileOutputStream("ou1.txt"));//建立一个字节流输出缓冲区
BufferedOutputStream bufos2 = new BufferedOutputStream(new FileOutputStream("out2.txt"));//建立第二个字节输出流缓冲区对象
int by=0;
int count=0;
while((by=bufis.read())!=-1)//对于同一个输入流缓冲区对象,分别用两个输出流输入
{
if(count%2==0)
{
bufos1.write(by);//输出缓冲区对象一输出一次
count++;
}
else
{
bufos2.write(by);//输出缓冲区对象二输出一次
count++;
}
}
bufos2.close();
bufos1.close();
bufis.close();
}
}
复制代码
在上面程序中in.txt的类容为:123456789
所得结果,out1.txt的类容为:13579
out2.txt的类容为:2468
多个输入对一个输出缓冲区:
import java.io.*;
class test1
{
public static void main(String[] args)throws IOException
{
copy();
}
public static void copy()throws IOException
{
BufferedInputStream bufis1 = new BufferedInputStream(new FileInputStream("in1.txt"));//建立一个字节流输入缓冲区
BufferedInputStream bufis2 = new BufferedInputStream(new FileInputStream("in2.txt"));//建立第二个字节流输入缓冲区
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("out.txt"));//建立一个字节输出流缓冲区对象
int by=0;
int count=0;
boolean []fileEnd={false,false};
while(true)//对于两个输入流缓冲区对象用同一个输出流
{
if(count%2==0&&fileEnd[0]==false)
{
if((by=bufis1.read())==-1)
{
fileEnd[0]=true;
}
count++;
}
else if(fileEnd[1]==false)
{
if((by=bufis2.read())==-1)
{
fileEnd[1]=true;
}
count++;
}
if(fileEnd[0]==true&&fileEnd[1]==true)
{
break;
}
if(by!=-1)
{
bufos.write(by);
}
}
bufos.close();
bufis2.close();
bufis1.close();
}
}
复制代码
在上面程序中in1.txt的类容为:13579
所得结果,in2.txt的类容为:2468
out2.txt的类容为:123456789
由此可见在输入输出流缓冲区对象是共享同一个缓冲区,该缓冲区应该就是单例模式
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2