DataInputStream запрос readFully - PullRequest
0 голосов
/ 07 мая 2011

Я использую сообщение dataInputStream readFully для чтения байтового массива фиксированной длины как:

byte[] record = new byte[4660004];

in.readFully(record);

Проблема здесь в том, что иногда для чтения этих многочисленных байтов требуется более 5 секунд, что равно 20000записей.И я получаю эти данные на сокете.Клиент отправляет данные в виде байтового массива из 4660004 байтов.Есть ли способ получить эти данные быстрее, так как сейчас требуется около 5 минут на 1 миллион таких записей.

РЕДАКТИРОВАТЬ :: полный поток данных:

сначала я создаю поток:

static DataInputStream dIn = null;

dIn = new DataInputStream(connection.getInputStream());
msgType = dIn.readByte();

int msgIntLen = dIn.readInt();

processBatch(msgIntType, msgIntLen, dIn, connector);

.
.

private static void processBatch(int msgIntType, int msgIntLen, DataInputStream in,
            Connector connector) throws IOException {

   int recordIntLen = in.readInt();
   byte[] record = new byte[msgIntLen - 4];
   in.readFully(record);

}   

где я должен включить буферизацию, если это поможет wudf?

1 Ответ

0 голосов
/ 07 мая 2011

Комментарии начинают прокручиваться, поэтому переходим к ответу.

Буферизируйте вывод на стороне клиента с помощью BufferedOutputStream. Обязательно вызовите dlOut.flush() после записи данных, чтобы неотправленные байты не остались в буферизованном потоке вывода.

Буферизуйте входные данные на стороне клиента с помощью BufferedInputStream.

Поскольку вы просто отправляете байтовые массивы, вам, вероятно, не нужны DataInputStream / DataOuputStream, если только вы не используете их для дополнительных целей. Вы можете просто использовать BufferedInputStream / BufferedOutputStream.

...