将DataInput转换为DataInputStream?

时间:2011-09-27 23:53:55

标签: java hadoop

如何在java中将DataInput转换为DataInputStream? 我需要知道DataInput的大小。

2 个答案:

答案 0 :(得分:1)

因为根据定义,流确实没有开始或结束,因此没有万无一知的方法可以知道有多少可用,所以你只需要从固定大小的块中读取流。听起来好像你用普通的.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);

答案 1 :(得分:0)

当您想知道要读取多少字节时,您会遇到困难。最简单的解决方案是将其转换为ByteArrayInputStream并使用它的available()方法来了解可用于读取的字节数。

以下示例为我工作

DataInput in = (...);
ByteArrayInputStream bis = (ByteArrayInputStream) in;
byte[] buffer = new byte[bis.available()];
in.readFully(buffer);
//use buffer as your wish