ReadableBytechannel.read始终返回-1

时间:2011-10-07 13:25:31

标签: java io nio

我正在使用ReadableByteChannel来读取文件。

代码段如下

   InputStream in = new FileInputStream("Copy.tiff");
   FileInputStream in1 = new FileInputStream("Copy.tiff");
   FileChannel inChannel = in1.getChannel();
   ReadableByteChannel srcChannel = null;
   srcChannel = Channels.newChannel(in);
   ByteBuffer buffer = ByteBuffer.allocate(1024);
   long pos1 = 0;
   buffer.rewind();
   pos1= srcChannel.read(buffer);//Here value is -1
   pos1 = inChannel.read(buffer);//Here some positive number

如果我使用InputStream,则read方法总是返回-1。 如果我使用FileInputStream它返回一个正数。 谷歌搜索没有提供任何适当的答案。 任何关于出错的反馈。

3 个答案:

答案 0 :(得分:1)

我无法重现(在Windows上)。我通过这两种方法获得了正值,但我不明白它为什么会失败。也许这是一个非常糟糕的依赖于实现的怪癖。

FileChannel(由FileInputStream.getChannel()返回)已经实现了ReadableByteChannel,所以我想知道你为什么要手动创建一个?

答案 1 :(得分:1)

以下代码适用于我:

    ByteBuffer buffer = ByteBuffer.allocate(1024);
    InputStream in = new FileInputStream("Copy.tiff");
    ReadableByteChannel srcChannel = Channels.newChannel(in);
    long pos = srcChannel.read(buffer);
    System.out.println("Position in channel: " + pos);

答案 2 :(得分:0)

ReadableByteChannel srcChannel = new FileInputStream("Copy.tiff).getChannel();