Java - BufferedOutputStream Class



Introduction

The Java BufferedOutputStream class implements a buffered output stream. By setting up such an output stream, an application can write bytes to the underlying output stream without necessarily causing a call to the underlying system for each byte written.

Class declaration

Following is the declaration for Java.io.BufferedOutputStream class −

public class BufferedOutputStream
   extends FilterOutputStream

Field

Following are the fields for Java.io.BufferedOutputStream class −

  • protected byte[] buf − This is the internal buffer where data is stored.

  • protected int count − This is the number of valid bytes in the buffer.

  • protected OutputStream out − This is the underlying output stream to be filtered.

Class constructors

Sr.No. Constructor & Description
1

BufferedOutputStream(OutputStream out)

This creates a new buffered output stream to write data to the specified underlying output stream.

2

BufferedOutputStream(OutputStream out, int size)

This creates a new buffered output stream to write data to the specified underlying output stream with the specified buffer size.

Class methods

Sr.No. Method & Description
1 void flush()

This method flushes this buffered output stream.

2 void write(byte[] b, int off, int len)

This method writes len bytes from the specified byte array starting at offset off to this buffered output stream.

3 void write(int b)

This method writes the specified byte to this buffered output stream.

Methods inherited

This class inherits methods from the following classes −

  • Java.io.FilterOutputStream
  • Java.io.Object

Here are the examples of how to use the BufferedOutputStream class in Java, each demonstrating a different aspect of its functionality−

Example - Writing Text to a File Using BufferedOutputStream

This example demonstrates how to write a string to a file using BufferedOutputStream.

package com.tutorialspoint;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamDemo {
   public static void main (String[] args) {
      String text = "Hello, BufferedOutputStream!";
      // Create BufferedOutputStream and FileOutputStream to write content to a file	  
      try (FileOutputStream fos = new FileOutputStream("example.txt");
         BufferedOutputStream bos = new BufferedOutputStream(fos)) { 
         // write contents to the BufferedOutputStream     
         bos.write(text.getBytes());
		 // Ensures all data is written to the file
         bos.flush(); 
         System.out.println("Data written successfully!");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Data written successfully!

After running the program, you can check the content of example.txt in the current directory.

Hello, BufferedOutputStream!

Explanation

  • This program reads a file example.txt using a BufferedInputStream wrapped around a FileInputStream.

  • It reads one byte at a time and prints it as a character.

  • The buffer improves efficiency by reducing the number of I/O operations.

Example - Writing Bytes in Chunks Using a Buffer

This example shows how to write an array of bytes in chunks to a file.

package com.tutorialspoint;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamDemo {
   public static void main(String[] args) {
      byte[] data = "This is an example of chunked writing.".getBytes();
      // Create BufferedOutputStream and FileOutputStream to write content to a file
      try (FileOutputStream fos = new FileOutputStream("example.txt");
         BufferedOutputStream bos = new BufferedOutputStream(fos)) {
         // define a chunk size
         int chunkSize = 10;
         for (int i = 0; i < data.length; i += chunkSize) {
            // write content as per the chunk size
            int length = Math.min(chunkSize, data.length - i);
            bos.write(data, i, length);
         }
         // Ensures all data is written to the file
         bos.flush();
         System.out.println("Chunked data written successfully!");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Chunked data written successfully!

After running the program, you can check the content of example.txt in the current directory.

This is an example of chunked writing.

Explanation

  • The data is split into chunks of 10 bytes and written iteratively.

  • The write method with offset and length parameters ensures that only a subset of the array is written during each iteration.

Example - Copying a File Using BufferedInputStream and BufferedOutputStream

We've used a "example.txt" file with following content−

Welcome to tutorialspoint.com

This example demonstrates copying the contents of one file to another.

package com.tutorialspoint;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamDemo {
   public static void main(String[] args) {
      // Create BufferedInputStream and FileInputStream to read content from a file
      // Create BufferedOutputStream and FileOutputStream to write content to a file
      try (FileInputStream fis = new FileInputStream("example.txt");
         BufferedInputStream bis = new BufferedInputStream(fis);
         FileOutputStream fos = new FileOutputStream("destination.txt");
         BufferedOutputStream bos = new BufferedOutputStream(fos)) {
         // Buffer of 1 KB
         byte[] buffer = new byte[1024]; 
         int bytesRead;
         // read till last byte
         while ((bytesRead = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, bytesRead);
         }
         // Ensures all data is written to the file		 
         bos.flush();
         System.out.println("File copied successfully!");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

File copied successfully!

After running the program, you can check the content of example.txt in the current directory.

Welcome to tutorialspoint.com

Explanation

  • BufferedInputStream reads data from source.txt in chunks of 1024 bytes.

  • BufferedOutputStream writes the data to destination.txt.

  • The loop ensures all data from the source file is read and written.

Advertisements