Middle
Чӣ гуна каналҳо дар контексти Java ҳастанд?
sobes.tech AI
Ҷавоб аз AI
Дарҳои дар Java (аз баста java.nio) нишон медиҳанд, ки пайвастагии дуҷониба барои хондан ва навиштани байтҳо байни буферҳо ва ҳуҷҷатҳо, монанди:
- Файлҳо (
FileChannel) - Сокетҳои шабакавӣ (
SocketChannel,ServerSocketChannel,DatagramChannel)
Барои фарқ кардан аз ҷараёнҳои анъанавии I/O, ки як самтӣ (фақат барои хондан ё навиштан) ва блоккунанда мебошанд, каналҳо:
- Аз пешфарз дуҷониба мебошанд.
- Метавонанд дар режими блоккунанда ва ғайриблоккунанда кор кунанд.
- Бо буферҳо (
java.nio.ByteBuffer) барои коркарди самараноки маълумот пайваст шудаанд. - Ҳамчун амалҳои асинхронӣ (бо
AsynchronousFileChannel,AsynchronousSocketChannelва ғайра) ва харитаи файлҳо ба хотира (FileChannel.map) дастгирӣ мекунанд.
Каналҳо дастрасии сатҳи поёнтар ба системаи амалӣ доранд, ки имкон медиҳад, ки дар кор бо миқдори зиёди маълумот, махсусан дар сценарияҳои I/O ғайриблоккунанда, иҷрои баландтар ба даст оранд.
Масалан барои истифодаи FileChannel:
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelExample {
public static void main(String[] args) throws IOException {
RandomAccessFile file = new RandomAccessFile("test.txt", "rw");
FileChannel fileChannel = file.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(48); // Буферро ҷудо кунед
int bytesRead = fileChannel.read(buffer); // Аз канали хонда ба буфер
while (bytesRead != -1) {
buffer.flip(); // Аз режими навиштан ба режими хондан гузаред
while (buffer.hasRemaining()) {
System.out.print((char) buffer.get()); // Аз буфер хондан
}
buffer.clear(); // Барои операсияи навбатии хондан буферро тоза кунед
bytesRead = fileChannel.read(buffer);
}
fileChannel.close();
file.close();
}
}