
- 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 - Reader mark(int readAheadLimit) method
Description
The Java Reader mark(int readAheadLimit) method marks the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.
mark(int readAheadLimit) method −
Marks the current position in the stream.
You can later reset back to this position using reset().
readAheadLimit is the maximum number of characters that can be read before the mark becomes invalid.
Works only if the reader supports marking (use reader.markSupported() to check).
Declaration
Following is the declaration for java.io.Reader.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. After reading this many characters, attempting to reset the stream may fail.
Return Value
This method does not return a value.
Exception
IOException − If the stream does not support mark(), or if some other I/O error occurs.
Example - Usage of Reader mark(int readAheadLimit) method
The following example shows the usage of Reader mark(int readAheadLimit) method.
ReaderDemo.java
package com.tutorialspoint; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class ReaderDemo { public static void main(String[] args) { try { String s = "Hello World"; // create a new StringReader Reader reader = new StringReader(s); // read the first five chars for (int i = 0; i < 5; i++) { char c = (char) reader.read(); System.out.print( c); } // mark current position for maximum of 10 characters reader.mark(10); // read five more chars for (int i = 0; i < 6; i++) { char c = (char) reader.read(); System.out.print( c); } // reset back to the marked position reader.reset(); // change line System.out.println(); // read six more chars for (int i = 0; i < 6; i++) { char c = (char) reader.read(); System.out.print( c); } // close the stream reader.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 - Mark and Reset within the Limit
The following example shows the usage of Reader mark(int readAheadLimit) method.
ReaderDemo.java
package com.tutorialspoint; import java.io.BufferedReader; import java.io.StringReader; import java.io.IOException; public class ReaderDemo { public static void main(String[] args) { String data = "ABCDEFG"; try (BufferedReader reader = new BufferedReader(new StringReader(data))) { System.out.print((char) reader.read()); // A reader.mark(3); // Mark after reading 'A' System.out.print((char) reader.read()); // B System.out.print((char) reader.read()); // C reader.reset(); // Go back to after 'A' System.out.print((char) reader.read()); // B (again) System.out.print((char) reader.read()); // C (again) System.out.print((char) reader.read()); // D } catch (IOException e) { e.printStackTrace(); } } }
Output
Let us compile and run the above program, this will produce the following result−
ABCBCD
Explanation
We mark the position after reading 'A'.
After reading 'B' and 'C', we reset() to the marked point.
We re-read 'B' and 'C', and then continue.
Example - Exceeding the Read-Ahead Limit
The following example shows the usage of Reader mark(int readAheadLimit) method.
ReaderDemo.java
package com.tutorialspoint; import java.io.BufferedReader; import java.io.StringReader; import java.io.IOException; public class ReaderDemo { public static void main(String[] args) { String data = "1234567890"; try (BufferedReader reader = new BufferedReader(new StringReader(data))) { reader.mark(3); // Mark at the start System.out.print((char) reader.read()); // 1 System.out.print((char) reader.read()); // 2 System.out.print((char) reader.read()); // 3 } catch (IOException e) { System.out.println("\nException: " + e.getMessage()); } } }
Output
Let us compile and run the above program, this will produce the following result−
123
Explanation
We marked with a limit of 3 characters.
Then we read 3 characters.