Преобразовать DataInput в DataInputStream? - PullRequest
6 голосов
/ 28 сентября 2011

Как я могу преобразовать DataInput в DataInputStream в Java? Мне нужно знать размер DataInput.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Поскольку поток, по определению, на самом деле не имеет начала или конца и, следовательно, не является надежным способом узнать, сколько доступно, вам просто нужно читать из потока кусками фиксированного размера.Похоже, что вам лучше использовать обычный старый .read (), а не readFully ():

    DataInputStream dis = new DataInputStream(...);
    byte[] buf = new byte[1024];
    int lastRead = 0;

    do {
        lastRead = dis.read(buf);
        //do something with 'buf' here

    } while (lastRead > 0);
0 голосов
/ 11 июля 2013

Вы столкнетесь с трудностями, когда захотите узнать, сколько байтов нужно прочитать. Самое простое решение - привести его к ByteArrayInputStream и использовать метод available (), чтобы узнать, сколько байтов доступно для чтения.

Следующий пример сработал для меня

DataInput in = (...);
ByteArrayInputStream bis = (ByteArrayInputStream) in;
byte[] buffer = new byte[bis.available()];
in.readFully(buffer);
//use buffer as your wish
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...