Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read lines from Java FileInputStream without losing my place

I have a FileInputStream. I'd like to read character-oriented, linewise data from it, until I find a particular delimiter. Then I'd like to pass the FileInputStream, with the current position set immediately after the end of the delimiter line, to a library that needs an InputStream.

I can use a BufferedReader to walk through the file a line at a time, and everything works great. However, this leaves the underlying file stream in

BufferedReader br = new BufferedReader(new InputStreamReader(myFileStream))

at a non-deterministic position -- the BufferedReader had to look ahead, and I don't know how far, and AFAICT there's no way to tell the BufferedReader to rewind the underlying stream to just after the last-returned line.

Is this the best solution? It seems crazy to have a ReaderInputStream(BufferedReader(InputStreamReader(FileInputStream))) but it's the only way I've seen to avoid rolling my own. I'd really like to avoid writing my own entire stream-that-reads-lines implementation if at all possible.

like image 890
Coderer Avatar asked Feb 15 '26 21:02

Coderer


1 Answers

You cannot unbuffer a buffered reader. You have to use the same wrapper for the life for the application. In your situation I would use

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));

String line = dis.readLine();

While DataInputStream.readLine() is deprecated, it could work for you if you are careful. Otherwise you only option is to read the bytes yourself and parse the text using the encoding required.

like image 199
Peter Lawrey Avatar answered Feb 18 '26 10:02

Peter Lawrey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!