Reading lines from an InputStream without buffering

后端 未结 3 1586
独厮守ぢ
独厮守ぢ 2020-12-19 12:51

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 bin

相关标签:
3条回答
  • 2020-12-19 13:15

    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.

    0 讨论(0)
  • 2020-12-19 13:19

    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;
    }
    
    0 讨论(0)
  • 2020-12-19 13:32

    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.

    0 讨论(0)
提交回复
热议问题