Reputation: 6211
Does Java have a simple method to read a line from an InputStream without buffering? BufferedReader is not suitable for my needs because I need to transfer both text and binary data through the same connection repeatedly and buffering just gets in the way.
Upvotes: 7
Views: 3480
Reputation: 36051
Eventually did it manually directly reading byte after byte from the InputStream without wrapping the InputStream. Everything I tried, like Scanner and InputStreamReader, reads ahead (buffers) the input :(
I guess I missed a some cases like \r.
public static String readLine(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int c;
for (c = inputStream.read(); c != '\n' && c != -1 ; c = inputStream.read()) {
byteArrayOutputStream.write(c);
}
if (c == -1 && byteArrayOutputStream.size() == 0) {
return null;
}
String line = byteArrayOutputStream.toString("UTF-8");
return line;
}
Upvotes: 7
Reputation: 62469
You could try the Scanner class: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
However, this may buffer the input if no newline characters are present:
Since this method continues to search through the input looking for a line separator, it may buffer all of the input searching for the line to skip if no line separators are present.
Upvotes: 0
Reputation: 111
You may be better off reading the InputStream with a BufferedReader and appending the read lines to a String.
You can then manipulate the String as you wish without worrying about buffering.
Upvotes: -3