Java - ByteArrayOutputStream write(byte[] b, int off, int len) method



Description

The Java ByteArrayOutputStream write(byte[] b, int off, int len) method writes a specific portion of a byte array (cbuf) into the output stream. The off parameter specifies the starting position in the array, and the len parameter specifies the number of bytes to write.

Declaration

Following is the declaration for java.io.ByteArrayOutputStream.write(byte[] b, int off, int len) method −

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

Parameters

  • b − The specified buffer.

  • off − Offset to start in the data.

  • len − The length of the bytes to write.

Return Value

This method doesn't return any value.

Exception

NA

Example - Using ByteArrayOutputStream write(byte[] b, int off, int len) method

The following example shows the usage of Java ByteArrayOutputStream write(byte[] b, int off, int len) method. We've created a ByteArrayOutputStream reference and then initialized it with ByteArrayOutputStream object. Now we've written a part of a bytearray to output stream using write() method and print the string representation of the stream using toString() method. Lastly in finally block, we close the stream using close() method.

package com.tutorialspoint;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayOutputStreamDemo {
   public static void main(String[] args) throws IOException {
      String str = "";      
      byte[] bs = {65, 66, 67, 68, 69};
      ByteArrayOutputStream baos = null;
      
      try {
         // create new ByteArrayOutputStream
         baos = new ByteArrayOutputStream();
      
         // write byte array to the output stream
         baos.write(bs, 2, 3);
         
         // converts buffer to string
         str = baos.toString();
         
         // print
         System.out.println(str);
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(baos!=null)
            baos.close();
      }   
   }
}

Output

Let us compile and run the above program, this will produce the following result −

CDE

Example - Using ByteArrayOutputStream write(byte[] b, int off, int len) method

The following example shows the usage of Java ByteArrayOutputStream write(byte[] b, int off, int len) method. We've created a ByteArrayOutputStream reference and then initialized it with ByteArrayOutputStream object. Now we've written complete bytearray to output stream using write() method and print the string representation of the stream using toString() method. Lastly in finally block, we close the stream using close() method.

package com.tutorialspoint;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayOutputStreamDemo {
   public static void main(String[] args) throws IOException {
      String str = "";      
      byte[] bs = {65, 66, 67, 68, 69};
      ByteArrayOutputStream baos = null;
      
      try {
         // create new ByteArrayOutputStream
         baos = new ByteArrayOutputStream();
      
         // write byte array to the output stream
         baos.write(bs, 0, bs.length);
         
         // converts buffer to string
         str = baos.toString();
         
         // print
         System.out.println(str);
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(baos!=null)
            baos.close();
      }   
   }
}

Output

Let us compile and run the above program, this will produce the following result −

ABCDE

Example - Using write(byte[] cbuf, int off, int len) to Write a Portion of a Byte Array

The following example shows the usage of Java ByteArrayOutputStream write(byte[] cbuf, int off, int len) method.

ByteArrayOutputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ByteArrayOutputStreamDemo {
   public static void main(String[] args) {
      // Create a ByteArrayOutputStream
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

      try {
         // Create a byte array
         byte[] byteArray = "Hello, ByteArrayOutputStream!".getBytes(StandardCharsets.UTF_8);

         // Write a portion of the byte array (from index 7, write 18 bytes)
         outputStream.write(byteArray, 7, 18);

         // Convert the stream content to a string and print it
         String result = outputStream.toString("UTF-8");
         System.out.println("Written content: " + result);

         // Close the stream (optional for ByteArrayOutputStream)
         outputStream.close();
      } catch (IOException e) {
         System.err.println("IOException occurred: " + e.getMessage());
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Written content: ByteArrayOutputStr

Explanation

  • Creating a Byte Array− The string "Hello, ByteArrayOutputStream!" is converted into a byte array using UTF-8 encoding.

  • Writing a Subset of the Byte Array− The write(byte[] cbuf, int off, int len) method writes part of the byte array to the stream. In this example, off = 7 (start from the 7th index, which corresponds to the byte 'B') and len = 18 (write 18 bytes starting from 'B'). This means the substring "ByteArrayOutputStr" is written to the stream.

  • Retrieving the Content− The content of the ByteArrayOutputStream is converted back to a string using toString(String charsetName).

  • Closing the Stream− The close() method is called for consistency, although it has no effect on ByteArrayOutputStream.

Key Points

  • Selective Writing− The write(byte[] cbuf, int off, int len) method allows writing a specific portion of the byte array, which is useful when only part of the data needs to be written.

  • Efficiency− Instead of creating a new byte array to hold a subset of the data, you can use this method to write directly from the original array.

  • Error= Handling− If off or len exceeds the bounds of the array, or if off + len > cbuf.length, an IndexOutOfBoundsException will be thrown.

  • Use Case− Commonly used when processing or manipulating large byte arrays, where only a portion of the data needs to be written to the stream.

java_bytearrayoutputstream.htm
Advertisements