Java : ScatteringByteChannel - API使用例
ScatteringByteChannel (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
ScatteringByteChannel インタフェースは、複数の ByteBuffer にバイトデータを読み込むことができる Channel です。
final var path = Path.of("R:", "java-work", "test.data");
System.out.println(path); // R:\java-work\test.data
final byte[] bytes = {10, 20, 30, 40, 50, 60, 70, 80, 90};
Files.write(path, bytes);
try (final ScatteringByteChannel channel = FileChannel.open(
path, StandardOpenOption.READ)) {
final ByteBuffer[] dsts = {
ByteBuffer.allocate(2),
ByteBuffer.allocate(3),
ByteBuffer.allocate(4),
};
final var ret = channel.read(dsts);
System.out.println(ret); // 9
System.out.println("-- dsts --");
for (final var dst : dsts) {
if (dst.hasArray()) {
System.out.println(Arrays.toString(dst.array()));
}
}
// 結果
// ↓
//-- dsts --
//[10, 20]
//[30, 40, 50]
//[60, 70, 80, 90]
}
メソッド
long read (ByteBuffer[] dsts)
final var path = Path.of("R:", "java-work", "test.data");
System.out.println(path); // R:\java-work\test.data
final byte[] bytes = {10, 20, 30, 40, 50, 60, 70, 80, 90};
Files.write(path, bytes);
try (final ScatteringByteChannel channel = FileChannel.open(
path, StandardOpenOption.READ)) {
final ByteBuffer[] dsts = {
ByteBuffer.allocate(2),
ByteBuffer.allocate(3),
ByteBuffer.allocate(4),
};
final var ret = channel.read(dsts);
System.out.println(ret); // 9
System.out.println("-- dsts --");
for (final var dst : dsts) {
if (dst.hasArray()) {
System.out.println(Arrays.toString(dst.array()));
}
}
// 結果
// ↓
//-- dsts --
//[10, 20]
//[30, 40, 50]
//[60, 70, 80, 90]
}
long read (ByteBuffer[] dsts, int offset, int length)
final var path = Path.of("R:", "java-work", "test.data");
System.out.println(path); // R:\java-work\test.data
final byte[] bytes = {10, 20, 30, 40, 50, 60, 70, 80, 90};
Files.write(path, bytes);
try (final ScatteringByteChannel channel = FileChannel.open(
path, StandardOpenOption.READ)) {
final ByteBuffer[] dsts = {
ByteBuffer.allocate(1),
ByteBuffer.allocate(2),
ByteBuffer.allocate(3),
ByteBuffer.allocate(4),
ByteBuffer.allocate(5),
};
final var ret = channel.read(dsts, 1, 3);
System.out.println(ret); // 9
System.out.println("-- dsts --");
for (final var dst : dsts) {
if (dst.hasArray()) {
System.out.println(Arrays.toString(dst.array()));
}
}
// 結果
// ↓
//-- dsts --
//[0]
//[10, 20]
//[30, 40, 50]
//[60, 70, 80, 90]
//[0, 0, 0, 0, 0]
}
Channelで宣言されたメソッド
close, isOpen
「Java API 使用例 : Channel」をご参照ください。
ReadableByteChannelで宣言されたメソッド
read
「Java API 使用例 : ReadableByteChannel」をご参照ください。