ReadableBytechannel.read всегда возвращает -1 - PullRequest
1 голос
/ 07 октября 2011

Я использую 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, всегда возвращается -1.Если я использую FileInputStream, он возвращает положительное число.Поиск в Google не дал соответствующего ответа.Любые отзывы о том, что идет не так.

Ответы [ 3 ]

1 голос
/ 07 октября 2011

У меня нормально работает следующий код:

    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);
1 голос
/ 07 октября 2011

Я не могу воспроизвести это (в Windows).Я получаю положительное значение с помощью обоих методов, и я не понимаю, почему он должен потерпеть неудачу.Может быть, это какая-то ужасная странная реализация.

FileChannel (как возвращается FileInputStream.getChannel ()) уже реализует ReadableByteChannel, поэтому мне интересно, почему вы создаете его вручную?

0 голосов
/ 08 октября 2011
ReadableByteChannel srcChannel = new FileInputStream("Copy.tiff).getChannel();
...