Java - PushbackInputStream read(byte[] b,int off,int len) method



Description

The Java PushbackInputStream read(byte[] b,int off,int len) method reads up to len bytes of data from this input stream into an array of bytes. This method first reads any pushed-back bytes; after that, if fewer than len bytes have been read then it reads from the underlying input stream. If len is not zero, the method blocks until at least 1 byte of input is available; otherwise, no bytes are read and 0 is returned.

read(byte[] b,int off,int len) method −

  • Reads up to len bytes of data from the input stream into an array b, starting at offset off.

  • Returns the number of bytes read, or -1 if the end of the stream is reached.

  • Commonly used when you want to fill part of a buffer, not necessarily from the start.

Declaration

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

public int read(byte[] b,int off,int len)

Parameters

  • b − The buffer into which the data is read.

  • off − The start offset in the destination array b.

  • len − The maximum number of bytes read.

Return Value

This method returns the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

Exception

  • NullPointerException − If b is null.

  • IndexOutOfBoundsException − If off is negative, len is negative, or len is greater than b.length - off.

  • IOException − If this input stream has been closed by invoking its close() method, or an I/O error occurs.

Example - Usage of PushbackInputStream read(byte[] b,int off,int len) method

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

PushbackInputStreamDemo.java

package com.tutorialspoint;

import java.io.*;

public class PushbackInputStreamDemo {
   public static void main(String[] args) {

      // declare a buffer and initialize its size:
      byte[] arrByte = new byte[1024];

      // create an array for our message
      byte[] byteArray = new byte[]{'H', 'e', 'l', 'l', 'o'};

      // create object of PushbackInputStream class for specified stream
      InputStream is = new ByteArrayInputStream(byteArray);
      PushbackInputStream pis = new PushbackInputStream(is);

      try {
         // read a char into our array
         pis.read(arrByte, 0, 3);

         // print arrByte
         for (int i = 0; i < 3; i++) {
            System.out.print((char) arrByte[i]);
         }
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

Output

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

Hel

Example - Read into middle of a buffer

The following example shows the usage of PushbackInputStream markSupported() method.

PushbackInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.IOException;

public class PushbackInputStreamDemo {
   public static void main(String[] args) throws IOException {
      byte[] data = "HELLO".getBytes();  // Source stream

      try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data))) {
         byte[] buffer = new byte[10]; // Larger buffer than needed

         // Read 3 bytes into buffer starting at offset 2
         int bytesRead = pbis.read(buffer, 2, 3);

         System.out.println("Bytes read: " + bytesRead);              // Output: 3
         System.out.println("Buffer content: " + new String(buffer)); // Output shows nulls + 'HEL'
      }
   }
}

Output

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

Bytes read: 3
Buffer content:   HEL

Explanation

  • Only 3 bytes are read (H, E, L).

  • They're placed in buffer[2], buffer[3], and buffer[4].

  • The rest of the buffer contains default zero values.

Example - Combine unread and read with offset

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

PushbackInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
import java.io.IOException;

public class PushbackInputStreamDemo {
   public static void main(String[] args) throws IOException {
      byte[] data = "JAVAIO".getBytes();

      try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data), 10)) {
         byte[] buffer = new byte[6];

         // Read first 4 bytes
         pbis.read(buffer, 0, 4); // J A V A
         System.out.println("First read: " + new String(buffer, 0, 4)); // Output: JAVA

         // Unread last 2 bytes (V and A)
         pbis.unread(buffer, 2, 2);

         // Read next 3 bytes into buffer starting at index 3
         pbis.read(buffer, 3, 3); // V A I

         System.out.println("Final buffer: " + new String(buffer)); // Output: JAVAI_
      }
   }
}

Output

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

First read: JAVA
Final buffer: JAVVAI

Explanation

  • First read: JAVA.

  • Unread 'V' and 'A'.

  • Read 3 more bytes into the middle of the buffer (buffer[3], buffer[4], buffer[5]): VAI.

java_io_pushbackinputstream.htm
Advertisements
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy