2015-08-07 2 views
1

я хочу прочитать из inputstream в двух различных отношениях клиента:Чтения с InputStream при использовании сканера

1: Использование Scanner над inputstream для чтения строк.

2: Используйте сам объект InputStream, чтобы прочитать файл с буфером.

Сначала я хочу прочитать текст, который дает мне имя и размер файла, в моем случае: «file: name: ...», «file: size: ...».

Когда у меня есть эта информация, InputStream должен фактически прочитать файл. Проблема в том, что я пытаюсь прочитать файл в «scanner.hasNextLine()» -loop с объектом InputStream, но это приводит к тому, что метод InputStream.read() возвращает -1 или EOS. Я привел эту проблему до минимального размера, так что вы просто должны мне ответить на этот вопрос:

Почему чтения метод возврата -1 здесь:

if (scanner.hasNextLine()) {   
    System.out.println(inputstream.read()); 
} 
+3

Пожалуйста, укажите больше кода. Легкий ответ на вопрос «Почему ... -1» - это то, что конец файла был достигнут, и это не поможет. – DSlomer64

+2

Почему вы читаете «Сканер» ** и ** '' InputStream''? –

+0

Я использую 'Scanner' и' InputStream', потому что с помощью 'Scanner' я хочу читать входящие команды и с помощью' InputStream', я хочу прочитать файл, который может быть ** другим ** из текстового файла. –

ответ

0

Хорошо мне не нужно ScannerиInputStream больше. Я могу делать и то, и другое, отправляя тексты и файлы, с DataOutputStreamwriteUTF(String) и write(byte[], int, int)). Это действительно очень хорошо работает и упрощает мой код.

Не говорите, что это наглый! Если у вас есть Socket, иногда вам нужно использовать InputStream двумя или тремя разными способами. И я не хотел использовать два сокета.

2

Как Oracle Documentation для Scanner.hasNextLine() состояний, этот метод не выдвинуть Scanner. Это означает, что вы можете постоянно смотреть в первую строку своего файла с Scanner, продвигая свой InputStream. Это означает, что хотя у Scanner есть следующая строка, InputStream может и не быть. Кажется, что вы сходите с конца файла с InputStream.

Если вы не продвигаете Scanner вместе с входным потоком, вы не можете знать, что Scanner смотрит то же местоположение в файле. В лучшем случае сомнительно читать один файл одновременно с Scanner и InputStream в любом случае.

Рассмотрите возможность реорганизации вашего кода только для использования одного или другого.

Если вы хотите, чтобы прочитать все содержимое файла в один String, считают это:

static String readFile(String path, Charset encoding) 
    throws IOException 
{ 
    byte[] encoded = Files.readAllBytes(Paths.get(path)); 
    return new String(encoded, encoding); 
} 

и другие методы от How do I create a Java string from the contents of a file?

+0

Упрек для сомнительной части ... – Dave

Смежные вопросы