¿Qué es un canal? Métodos comunes de la clase FileChannel

El canal es un objeto de interfaz, que es similar al objeto de flujo tradicional, pero es algo diferente del objeto de flujo tradicional, como se muestra a continuación:

• El canal puede realizar operaciones de lectura y escritura de E/S de forma asincrónica.

• Las operaciones de lectura y escritura del Canal son bidireccionales. Los datos pueden leerse desde el Canal y escribirse en el Canal. Las operaciones de lectura y escritura del flujo suelen ser unidireccionales.

• El canal puede asignar directamente parte o la totalidad del archivo especificado al búfer.

• El canal sólo puede interactuar con el búfer y los programas no pueden leer ni escribir datos directamente en el canal.

Para usar Channel, necesita usar su clase de implementación. En el paquete java.nio.channels, se proporcionan muchas clases de implementación de interfaz de canal, incluidas DatagramChannel, FileChannel, Pipe.SinkChannel, Pipe.SourceChannel, ServerSocketChannel, SocketChannel, etc. Entre ellos, DatagramChannel se usa para admitir la comunicación de red UDP, FileChannel se usa para leer y escribir datos de archivos, Pipe.SinkChannel y PipeSourceChannel se usan para admitir la comunicación entre subprocesos, y ServerSocketChannel y SocketChannel se usan para admitir la comunicación de red TCP. Aquí se explicará principalmente el uso de FileChannel.

El objeto Canal no se crea mediante el método de construcción, pero el Canal correspondiente se obtiene mediante el método getChannel () de E/S tradicional. Diferentes transmisiones obtienen diferentes canales. Por ejemplo, FleInputStream y FileOutputStream obtienen FileChannel, y también puede usar RandomAccessFile para obtener el objeto, mientras que PipedInputStream y PipedOutputStream obtienen Pipe.SinkChannel y PipeSourceChannel.

La clase FileChannel puede implementar operaciones comunes de lectura y escritura y proporciona muchos métodos especialmente utilizados para operar archivos en la clase. Los métodos comunes se muestran en la tabla.

inserte la descripción de la imagen aquí

Después de comprender los métodos y funciones comunes de la clase FileChannel, a continuación se utiliza un caso de copia de archivo para demostrar el uso de FileChannel, como se muestra a continuación.

import java .1 o.*;
importjava.nio.channels.*;
public class Example19 {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //创建RandomAccessFile对象,指定源文件
        RandomAccessFile infile = new RandomAccessFile("source/src.jpg", "rw")
        //获取读取源文件 Filehannel 通道
        FileChannel inChannel = infile.getChannel();
        //创建RandomAccessFile对象,指定目标文件
        RandomAccessFile outfile = new RandomAccessFile("target/dest.jpg", "rw");
        //获取复制目标文件 Filechannel通道
        FileChanneloutChannel = outfile.getChannel();
        //使用transferTo(方法进行整体复制
        long transferTo = inChannel.transferTo(0, inChannel.size() outChannel);
        if (transferTo > 0) {
    
    
            System.out.printIn("复制成功!");
        }
        //关闭资源
        infile.close();
        inChannel.close();
        outfile.close();
        outChannel.close();
    }
}

Supongo que te gusta

Origin blog.csdn.net/cz_00001/article/details/132366861
Recomendado
Clasificación