Java - SequenceInputStream close() method



Description

The Java SequenceInputStream close() method closes this input stream and releases any system resources associated with the stream. A closed SequenceInputStream cannot perform input operations and cannot be reopened.

Declaration

Following is the declaration for java.io.SequenceInputStream.close() method.

public void close()

Parameters

NA

Return Value

This method does not return a value.

Exception

  • IOException − If an I/O error occurs.

Example - Usage of SequenceInputStream close() method

The following example shows the usage of SequenceInputStream close() method.

SequenceInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.SequenceInputStream;

public class SequenceInputStreamDemo {
   public static void main(String[] args) {
      
      // create two  new strings with 5 characters each
      String s1 = "Hello";
      String s2 = "World";

      // create 2 input streams
      byte[] b1 = s1.getBytes();
      byte[] b2 = s2.getBytes();
      ByteArrayInputStream is1 = new ByteArrayInputStream(b1);
      ByteArrayInputStream is2 = new ByteArrayInputStream(b2);

      // create a new Sequence Input Stream
      SequenceInputStream sis = new SequenceInputStream(is1, is2);
      
      try {
         // read 10 characters, 5 from each stream
         for (int i = 0; i < 10; i++) {
            char c = (char) sis.read();
            System.out.print(c);
         }

         // change line
         System.out.println();

         // start closing the streams
         System.out.println("Closing Streams...");

         // close the streams
         sis.close();
         is1.close();
         is2.close();

         // print message for closed streams
         System.out.println("Streams Closed.");

      } catch (IOException ex) {
         ex.printStackTrace();
      }
   }
}

Output

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

HelloWorld
Closing Streams...
Streams Closed.

Example - Properly closing a SequenceInputStream after reading

The following example shows the usage of SequenceInputStream close() method.

SequenceInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.SequenceInputStream;
import java.io.IOException;

public class SequenceInputStreamDemo {
   public static void main(String[] args) {
      try {
         ByteArrayInputStream input1 = new ByteArrayInputStream("Java".getBytes());
         ByteArrayInputStream input2 = new ByteArrayInputStream("Stream".getBytes());

         SequenceInputStream sis = new SequenceInputStream(input1, input2);

         int data;
         while ((data = sis.read()) != -1) {
            System.out.print((char) data);
         }

         sis.close(); // Closes SequenceInputStream and both ByteArrayInputStreams
         System.out.println("\nStream closed successfully.");

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

Output

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

JavaStream
Stream closed successfully.

Explanation

  • The stream reads from both sources ("JavaStream").

  • After reading,close() is called to release all underlying resources.

  • This is good practice in all I/O code.

Example - Attempting to read after closing the stream

The following example shows the usage of SequenceInputStream close() method.

SequenceInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.SequenceInputStream;
import java.io.IOException;

public class SequenceInputStreamDemo {
   public static void main(String[] args) {
      try {
         ByteArrayInputStream input1 = new ByteArrayInputStream("ABC".getBytes());
         ByteArrayInputStream input2 = new ByteArrayInputStream("DEF".getBytes());

         SequenceInputStream sis = new SequenceInputStream(input1, input2);

         sis.close(); // Close the stream immediately

         // Try to read after closing
         int data = sis.read(); // This should throw an exception
         System.out.println("Data: " + (char) data);

      } catch (IOException e) {
         System.out.println("Exception: Cannot read after closing the stream.");
      }
   }
}

Output

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

Data: ?

Explanation

  • The SequenceInputStream is closed before any reading.

  • A read attempt afterward causes an IOException.

java_io_sequenceinputstream.htm