我正在使用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它返回一个正数。 谷歌搜索没有提供任何适当的答案。 任何关于出错的反馈。
答案 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();