Как гласит название, может DataInputStream.read()
переопределить ранее прочитанные байты, если имеется больше байтов, чем размер буфера, если в первом чтении были пропущены некоторые байты?Будет ли DataInputStream переопределять байты с последовательными чтениями
Есть пакеты фиксированного размера, обмен которыми осуществляется между одноранговыми узлами, и возможно, что два пакета доступны в гнезде. Предположим, что размер одного пакета равен 500, и в соке есть два пакета общего размера 1000. Кроме того, допустим, что для чтения получает 400 байт из доступного 1000.
Даже возможно, что
read()
не читает все 500 байт, если они доступны?Что произойдет, если чтение будет вызвано снова, возможно ли, что прочитано более 100 байтов?
Это не совсем ясно мне, что происходит в этом случае с учетом Javadoc:
Первый прочитанный байт сохраняется в элементе Ь [0], следующий в Ь [1] , и так далее. Количество прочитанных байтов, самое большее, равно длине b.
Я хотел бы знать, если ниже блок кода должен быть изменен, как показано в комментарии, чтобы полностью прочитать только один пакет.
while ((readBytes = stream.read(buffer)) != -1) {
totalBytes += readBytes;
if (totalBytes < buffer.length) { // must this be != instead of < ?
continue;
}
// all bytes are available
else {
break;
}
Ваш пример неясен - вы говорите об одном пакете размером 500 и двух пакетах размером 1000, всего в двух пакетах. –
Я имею в виду, что перед чтением доступно 1000 байт. Буфер имеет размер 500, и я хотел бы читать только 500, принадлежащих первому пакету. Buffer is byte [] передан методу чтения. – John
Я даже не уверен, возможна ли такая ситуация. Так как мне не ясно, будет ли я читать все байты, доступные в момент чтения. – John