BufferedOutputStream实现了一个缓冲输出流。构建了这样一个输出流后,应用可以往底层流写数据而不用每次写一个字节都调用底层流的方法。
public class BufferedOutputStream extends FilterOutputStream {
// 内部缓冲区,存储数据
protected byte buf[];
// 缓冲区中有效的字节数(0 ~ buf.length)
protected int count;
// 构造方法,创建一个新的输出缓冲流,并把数据写到指定的底层输出流
public BufferedOutputStream(OutputStream out) {
this(out, 8192);
}
// 构造方法,创建一个新的输出缓冲流,以将具有指定缓冲区大小的数据写到指定的底层输出流。
public BufferedOutputStream(OutputStream out, int size) {
super(out);
if (size <= 0) {
throw new IllegalArgumentException("Buffer size <= 0");
}
buf = new byte[size];
}
// 刷新内部的缓冲区,这会让内部缓冲区的有效字节被写出到此缓冲的输出流中
private void flushBuffer() throws IOException {
if (count > 0) {
out.write(buf, 0, count);
count = 0;
}
}
// 将指定的字节写入此缓冲的输出流
public synchronized void write(int b) throws IOException {
// 如果缓冲区满,则刷新缓冲区
if (count >= buf.length) {
flushBuffer();
}
buf[count++] = (byte)b;
}
// 将指定字节数组中的从偏移量off开始len个字节写入此缓冲的输出流
public synchronized void write(byte b[], int off, int len) throws IOException {
if (len >= buf.length) {
// 如果待写入的字节数大于或等于缓冲区大小,刷新缓冲区,并直接写入到输出流中
flushBuffer();
out.write(b, off, len);
return;
}
if (len > buf.length - count) {
flushBuffer();
}
System.arraycopy(b, off, buf, count, len);
count += len;
}
// 刷新此缓冲区和输出流,这会使所有缓冲的输出字节被写出到底层输出流中
// 为了让缓冲区的数据能被写入到底层输出流中,可以显式调用该方法。或者调用close()方法(父类FilterOutputStream的close()方法),在close方法里,调用该flush()方法
public synchronized void flush() throws IOException {
flushBuffer();
out.flush();
}
}
分享到:
相关推荐
BufferedOutputStream 是缓冲输出流。它继承于FilterOutputStream。 BufferedOutputStream 的作用是为另一个输出流提供“缓冲功能”。
java的BufferedOutputStream,开发过程中使用字符流,效率提高。字符流很好,初学者要分清字符流和字节流
BufferedOutputStream的用法---马克-to-win java视频 缓存输出流
BufferedInputStream和BufferedOutputStream分别继承于FilterInputStream和FilterOutputStream,代表着缓冲区的输入输出,这里我们就来看一下Java中的BufferedInputStream与BufferedOutputStream使用示例:
jdk api-BufferedOutputStream基础、应用、实战
BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, ...
字节缓冲输出流: BufferedOutputStream (OutputStream out) public class BufferStreamDemo { public static void main(String[] args) throws IOException { //字节缓冲输出流: BufferedOutputStream ...
其实在网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,所以这篇文章在此记录一下下载zip文件并直接解压的方法,直接上代码,文末有源码下载。 下载: import java.io.BufferedInputStream; ...
下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 24352ms 44092 42.04940796 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_...
下面小编就为大家带来一篇java在文件尾部追加内容的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
分析Java常用IO流,包括InputStream、OutputStream、FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、FileReader、...
BufferedOutputStream outBuff=new BufferedOutputStream(output); // 缓冲数组 byte[] b = new byte[1024 * 5]; int len; while ((len =inBuff.read(b)) != -1) { outBuff.write(b, 0, len); } //...
zos = new ZipOutputStream(new BufferedOutputStream(fos, BUFFER)); zos.setLevel(9); byte[] data = new byte [BUFFER]; for (int i = 0; i; i++){ // 设置压缩文件入口entry,为被...
摘要:Java源码,文件操作,读取文件,二进制 Java读存大块二进制资料文件,java.io 包中提供了BufferedInputStream 和BufferedOutputStream 类来缓存的读写流。但是读写大块的数据文件时,使用这两个类的效果并不是很好...
BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response内容的类型 response.setHeader( "Content-disposition", "attachment...
java IO 字节流练习代码 FileInputStream和...BufferedInputStream 和 BufferedOutputStream DataInputStream 和 DataOutputStream ObjectInputStream和ObjectOutputStream PrintStream PushbackInputStream
FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、...BufferedOutputStream、BufferedInputStream、PipedReader、PipedWriter、PipedInputStream、PipedOutputStream...
缓冲流 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,...BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));
Java reads and stores large binary data files. The java.io package provides BufferedInputStream and BufferedOutputStream classes to buffer read and write streams
bos = new BufferedOutputStream(new FileOutputStream(file));; int num = -1; byte[] buffer = new byte[1024]; while (true) { num = bis.read(buffer); if (num == -1) { bos....