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



Description

The Java OutputStream write(byte[] b, int off, int len) method writes len bytes from the specified byte array starting at offset off to this output stream. The general contract for write(b, off, len) is that some of the bytes in the array b are written to the output stream in order; element b[off] is the first byte written and b[off+len-1] is the last byte written by this operation.

The write method of OutputStream calls the write method of one argument on each of the bytes to be written out. Subclasses are encouraged to override this method and provide a more efficient implementation.

If b is null, a NullPointerException is thrown. If off is negative, or len is negative, or off+len is greater than the length of the array b, then an IndexOutOfBoundsException is thrown.

Declaration

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

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

Parameters

  • b − The data.

  • off − The start offset in the data.

  • len − The number of bytes to write.

Return Value

This method does not return a value.

Exception

IOException − If an I/O error occurs. In particular, an IOException is thrown if the output stream is closed.

Example - Usage of OutputStream write(byte[] b, int off, int len) method

The following example shows the usage of OutputStream write(byte[] b, int off, int len) method.

OutputStreamDemo.java

package com.tutorialspoint;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class OutputStreamDemo {
   public static void main(String[] args) {
      byte[] b = {'h', 'e', 'l', 'l', 'o'};
      
      try {
         // create a new output stream
         OutputStream os = new FileOutputStream("test.txt");

         // craete a new input stream
         InputStream is = new FileInputStream("test.txt");

         // write something
         os.write(b, 0, 3);

         // read what we wrote
         for (int i = 0; i < 3; i++) {
            System.out.print("" + (char) is.read());
         }
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

Output

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

hel

Example - Writing a portion of a byte array to a file

The following example shows the usage of OutputStream write(byte[] b, int off, int len) method.

OutputStreamDemo.java

package com.tutorialspoint;

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

public class OutputStreamDemo {
   public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream("partial_output1.txt");

         String message = "Hello, OutputStream!";
         byte[] data = message.getBytes();

         // Write only "OutputStream" (starts at index 7, length 12)
         fos.write(data, 7, 12);  // Writes: "OutputStream"

         fos.close();
         System.out.println("Partial data written to file.");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

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

Partial data written to file.

Explanation

  • write(byte[] b, int off, int len) writes a specific range of bytes.

  • In this example −

    • off = 7 (start at index 7 of the byte array)

    • len = 12 (write 12 bytes)

  • Only the substring "OutputStream" gets written to partial_output1.txt.

Example - Writing a part of an array to memory using ByteArrayOutputStream

The following example shows the usage of OutputStream write(byte[] b, int off, int len) method.

OutputStreamDemo.java

package com.tutorialspoint;

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

public class OutputStreamDemo {
   public static void main(String[] args) {
      try {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();

         byte[] letters = {65, 66, 67, 68, 69, 70, 71};  // A to G

         // Write only 'C', 'D', 'E' (indices 2 to 4)
         baos.write(letters, 2, 3);

         byte[] result = baos.toByteArray();
         for (byte b : result) {
            System.out.print((char) b + " ");
         }

         baos.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

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

C D E

Explanation

  • Only 3 bytes starting from index 2 are written: 67 (C), 68 (D), 69 (E).

  • This is useful when you want to extract or stream only a portion of data.

  • Output printed: C D E

java_io_outputstream.htm
Advertisements