2011-12-13 2 views
2

Есть ли у Java простой метод для чтения строки из InputStream без буферизации? BufferedReader не подходит для моих нужд, потому что мне нужно повторно передавать как текстовые, так и двоичные данные через одно и то же соединение, и буферизация просто мешает.Чтение строк из InputStream без буферизации

+0

Через двоичные данные, не имеют линий, Как узнать о том, являются ли ваши данные текстовыми или двоичными? – belgther

+1

У меня есть их. Запрос начинается с текстовых строк, описывающих его, а иногда и двоичных данных. – Ree

+0

Возможный дубликат: http://stackoverflow.com/questions/25215564/how-to-read-a-line-from-inputstream-without-buffering-the-input –

ответ

0

Вы можете попробовать класс Scanner: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Однако это может буфера ввода, если не символы перевода строки не присутствуют:

Поскольку этот метод продолжает поиск через вход ищет для line , он может буферизовать весь вход, который ищет линию, чтобы пропустить, если нет разделителей строк .

+0

Сканер буферизует ввод даже после новой строки :( –

+0

'Scanner' выполняет буферизацию прошлой строки. У меня есть' StringR eader' с семью строками и «Сканер» буферизирует их все за один снимок. –

-1

Возможно, вам лучше читать InputStream с помощью BufferedReader и добавлять строки чтения к String.

Затем вы можете манипулировать строкой, если хотите, не беспокоясь о буферизации.

+1

Проблема в том, что я не контролирую, как BufferedReader читает ввод. Он может читать строку и кусок данных PAST it. Я не хочу этого. – Ree

+0

@Ree, я думаю, что сканер только буферизует назад, а не вперед. – Tudor

4

В конце концов он вручную вручную считывал байт после байта из InputStream без упаковки InputStream. Все, что я пытался, как сканер и InputStreamReader, читает вперед (буферы) вход :(

Я предполагаю, что я пропустил некоторые случаи, как \ г.

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; 
} 
Смежные вопросы