
- Java.io - Home
- Java.io - BufferedInputStream
- Java.io - BufferedOutputStream
- Java.io - BufferedReader
- Java.io - BufferedWriter
- Java.io - ByteArrayInputStream
- Java.io - ByteArrayOutputStream
- Java.io - CharArrayReader
- Java.io - CharArrayWriter
- Java.io - Console
- Java.io - DataInputStream
- Java.io - DataOutputStream
- Java.io - File
- Java.io - FileDescriptor
- Java.io - FileInputStream
- Java.io - FileOutputStream
- Java.io - FilePermission
- Java.io - FileReader
- Java.io - FileWriter
- Java.io - FilterInputStream
- Java.io - FilterOutputStream
- Java.io - FilterReader
- Java.io - FilterWriter
- Java.io - InputStream
- Java.io - InputStreamReader
- Java.io - LineNumberInputStream
- Java.io - LineNumberReader
- Java.io - ObjectInputStream
- Java.io - ObjectInputStream.GetField
- Java.io - ObjectOutputStream
- io - ObjectOutputStream.PutField
- Java.io - ObjectStreamClass
- Java.io - ObjectStreamField
- Java.io - OutputStream
- Java.io - OutputStreamWriter
- Java.io - PipedInputStream
- Java.io - PipedOutputStream
- Java.io - PipedReader
- Java.io - PipedWriter
- Java.io - PrintStream
- Java.io - PrintWriter
- Java.io - PushbackInputStream
- Java.io - PushbackReader
- Java.io - RandomAccessFile
- Java.io - Reader
- Java.io - SequenceInputStream
- Java.io - SerializablePermission
- Java.io - StreamTokenizer
- Java.io - StringBufferInputStream
- Java.io - StringReader
- Java.io - StringWriter
- Java.io - Writer
- Java.io package Useful Resources
- Java.io - Discussion
Java - StringReader mark(int readAheadLimit) method
Description
The Java StringReader mark(int readAheadLimit) method marks the present position in the stream. Subsequent calls to reset() will reposition the stream to this point.
Declaration
Following is the declaration for java.io.StringReader.mark(int readAheadLimit) method.
public void mark(int readAheadLimit)
Parameters
readAheadLimit − Limit on the number of characters that may be read while still preserving the mark. Because the stream's input comes from a string, there is no actual limit, so this argument must not be negative, but is otherwise ignored.
Return Value
This method does not return a value.
Exception
IllegalArgumentException − If readAheadLimit is < 0.
IOException − If an I/O error occurs.
Example - Usage of StringReader mark(int readAheadLimit) method
The following example shows the usage of StringReader mark(int readAheadLimit) method.
StringReaderDemo.java
package com.tutorialspoint; import java.io.IOException; import java.io.StringReader; public class StringReaderDemo { public static void main(String[] args) { String s = "Hello World"; // create a new StringReader StringReader sr = new StringReader(s); try { // read the first five chars for (int i = 0; i < 5; i++) { char c = (char) sr.read(); System.out.print("" + c); } // mark the reader at position 5 for maximum 6 sr.mark(6); // read the next six chars for (int i = 0; i < 6; i++) { char c = (char) sr.read(); System.out.print("" + c); } // reset back to marked position sr.reset(); // read again the next six chars for (int i = 0; i < 6; i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
Output
Let us compile and run the above program, this will produce the following result −
Hello World World
Example - Basic use of mark() and reset()
The following example shows the usage of StringReader mark(int readAheadLimit) method.
StringReaderDemo.java
package com.tutorialspoint; import java.io.StringReader; public class StringReaderDemo { public static void main(String[] args) throws Exception { StringReader reader = new StringReader("abcdef"); System.out.print((char) reader.read()); // a reader.mark(3); // mark at position after 'a' System.out.print((char) reader.read()); // b System.out.print((char) reader.read()); // c reader.reset(); // go back to mark (before 'b') System.out.print((char) reader.read()); // b System.out.print((char) reader.read()); // c reader.close(); } }
Output
Let us compile and run the above program, this will produce the following result−
abcbc
Explanation
You read 'a', then mark the position.
Then read 'b' and 'c'.
After reset(), you go back to the position after 'a' and read 'b' and 'c' again.
Example - Mark becomes invalid after reading beyond readAheadLimit
The following example shows the usage of StringReader mark(int readAheadLimit) method.
StringReaderDemo.java
package com.tutorialspoint; import java.io.StringReader; public class StringReaderDemo { public static void main(String[] args) { try { StringReader reader = new StringReader("123456"); reader.read(); // '1' reader.mark(2); // mark after '1' reader.read(); // '2' reader.read(); // '3' reader.read(); // '4' -> readAheadLimit is 2, so this exceeds limit reader.reset(); // invalid, too much read after mark System.out.println("Reset successful."); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } } }
Output
Let us compile and run the above program, this will produce the following result−
Reset successful.
Explanation
The mark(2) allows reading up to 2 characters after the mark.
We read 3 characters ('2', '3', '4') → limit exceeded.
So calling reset() throws an IOException with message "Mark invalid".