
- 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 - LineNumberReader mark(int readAheadLimit) method
Description
The Java LineNumberReader mark(int readAheadLimit) method marks the current position in the stream so that it can be reset later using reset(). The parameter r specifies the read-ahead limit, which defines how many characters can be read before the mark becomes invalid.
Declaration
Following is the declaration for java.io.LineNumberReader.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.
Return Value
The method does not return any value.
Exception
IOException − If an I/O error occurs.
Example - Usage of LineNumberReader mark(int readAheadLimit) method
The following example shows the usage of Java LineNumberReader mark(int readAheadLimit) method.
LineNumberReaderDemo.java
package com.tutorialspoint; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class LineNumberReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = null; LineNumberReader lnr = null; int i; try { // create new reader fr = new FileReader("test.txt"); lnr = new LineNumberReader(fr); // reads and prints data from reader System.out.println((char)lnr.read()); System.out.println((char)lnr.read()); // mark invoked at this position lnr.mark(0); System.out.println("mark() invoked"); System.out.println((char)lnr.read()); System.out.println((char)lnr.read()); // if this reader supports mark() an reset() if(lnr.markSupported()) { // reset() repositioned the reader to the mark lnr.reset(); System.out.println("reset() invoked"); System.out.println((char)lnr.read()); System.out.println((char)lnr.read()); } } catch(Exception e) { // if any error occurs e.printStackTrace(); } finally { // closes the stream and releases system resources if(fr!=null) fr.close(); if(lnr!=null) lnr.close(); } } }
Output(Assuming test.txt contains "ABCDE")
Let us compile and run the above program, this will produce the following result−
A B mark() invoked C D reset() invoked C D
Example - Marking and Resetting a Line
The following example shows the usage of Java LineNumberReader mark(int readAheadLimit) method. This example demonstrates marking a position in the stream, reading some lines, and then using reset() to go back to the marked position.
LineNumberReaderDemo.java
package com.tutorialspoint; import java.io.IOException; import java.io.LineNumberReader; import java.io.StringReader; public class LineNumberReaderDemo { public static void main(String[] args) { String text = "First Line\nSecond Line\nThird Line"; LineNumberReader lnr = new LineNumberReader(new StringReader(text)); try { System.out.println("Reading first line: " + lnr.readLine()); // Mark the current position lnr.mark(50); System.out.println("Marked at Line Number: " + lnr.getLineNumber()); System.out.println("Reading second line: " + lnr.readLine()); System.out.println("Reading third line: " + lnr.readLine()); // Reset to the marked position lnr.reset(); System.out.println("After reset, current line: " + lnr.readLine()); System.out.println("Line Number after reset: " + lnr.getLineNumber()); lnr.close(); } catch (IOException e) { e.printStackTrace(); } } }
Output(if example.txt contains "Hello")
Let us compile and run the above program, this will produce the following result−
Reading first line: First Line Marked at Line Number: 1 Reading second line: Second Line Reading third line: Third Line After reset, current line: Second Line Line Number after reset: 2
Explanation
Reads the first line (First Line).
Calls mark(50), saving the position at line 1.
Reads two more lines (Second Line and Third Line).
Calls reset(), which returns to the marked position.
Reads again from the marked line (Second Line), confirming that reset() worked.
Example - Marking and Skipping Lines
The following example shows the usage of Java LineNumberReader mark(int readAheadLimit) method. This example marks a position, skips a few lines, and then resets to the marked position.
LineNumberReaderDemo.java
package com.tutorialspoint; import java.io.IOException; import java.io.LineNumberReader; import java.io.StringReader; public class LineNumberReaderDemo { public static void main(String[] args) { String text = "Apple\nBanana\nCherry\nDate\nElderberry"; LineNumberReader lnr = new LineNumberReader(new StringReader(text)); try { System.out.println("Reading first line: " + lnr.readLine()); // Mark the position after reading the first line lnr.mark(100); System.out.println("Marked at Line Number: " + lnr.getLineNumber()); // Skip two lines lnr.readLine(); lnr.readLine(); System.out.println("After skipping, Line Number: " + lnr.getLineNumber()); // Reset to the marked position lnr.reset(); System.out.println("After reset, reading again: " + lnr.readLine()); System.out.println("Line Number after reset: " + lnr.getLineNumber()); lnr.close(); } catch (IOException e) { e.printStackTrace(); } } }
Output
Let us compile and run the above program, this will produce the following result−
Reading first line: Apple Marked at Line Number: 1 After skipping, Line Number: 3 After reset, reading again: Banana Line Number after reset: 2
Explanation
Reads the first line (Apple).
Calls mark(100), marking the position at line 1.
Reads two more lines (Banana and Cherry), moving to line 3.
Calls reset(), returning to line 1.
Reads again, confirming that resetting works as expected.