Когда я выполняю следующий класс
import java.io.*;
import java.nio.*;
import java.nio.file.*;
import java.nio.channels.*;
public class FileChannelTest {
public static void main(final String... args) throws IOException {
final File file = File.createTempFile("temp", null);
file.deleteOnExit();
// write some
try(OutputStream output = new FileOutputStream(file)) {
output.write(new byte[128]);
output.flush();
}
System.out.println("length: " + file.length());
// read to end
try(FileChannel channel
= FileChannel.open(file.toPath(), StandardOpenOption.READ)) {
final ByteBuffer buffer = ByteBuffer.allocate(128);
for(int read; (read = channel.read(buffer)) != -1; ) {
System.out.println("read: " + read);
}
}
}
}
Цикл чтения никогда не заканчивается.
$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
$ java FileChannelTest.java
$ java FileChannelTest
length: 128
read: 128
read: 0
read: 0
read: 0
...
...
...
Файловый канал. read(ByteBuffer) говорит,
Считывает последовательность байтов из этого канала в заданный буфер. Байты считываются, начиная с текущей позиции файла этого канала, а затем позиция файла обновляется количеством фактически прочитанных байтов. В противном случае этот метод ведет себя точно так, как указано в интерфейсе
ReadableByteChannel
.
Что означает Иначе?
ReadableByteChannel.read
, а не все его поведение. - person Score_Under   schedule 15.01.2016FileChannel
. Я мог бы сам погуглить, если бы захотел узнать, что означает слово иначе. - person Jin Kwon   schedule 24.01.2016