Il existe de nombreuses façons de lire des fichiers, basées sur la méthode traditionnelle du flux d'entrée ou sur l'objet tampon Buffer et la méthode de lecture de canal basés sur nio, ou même sur un mappage mémoire très rapide pour lire les fichiers.
Quatre façons de lire des fichiers en Java : (Recommandé : Tutoriel vidéo Java)
1. RandomAccessFile : Lecture aléatoire, relativement lente. Pointeur de fichier lisible, inscriptible et utilisable
2. FileInputStream : mode de flux d'entrée ordinaire, vitesse et efficacité moyennes
3. Lecture du tampon Buffer : basée sur la lecture de nio Buffer et FileChannel, plus rapide
.4. Lecture mappée en mémoire : basée sur MappedByteBuffer, la lecture la plus rapide
RandomAccessFile
//RandomAccessFile类的核心在于其既能读又能写 public void useRandomAccessFileTest() throws Exception { RandomAccessFile randomAccessFile = new RandomAccessFile(new File("e:/nio/test.txt"), "r"); byte[] bytes = new byte[1024]; int len = 0; while ((len = randomAccessFile.read(bytes)) != -1) { System.out.println(new String(bytes, 0, len, "gbk")); } randomAccessFile.close(); }
Lecture FielInputStream
//使用FileInputStream文件输入流,比较中规中矩的一种方式,传统阻塞IO操作。 public void testFielInputStreamTest() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); // 使用输入流读取文件,以下代码块几乎就是模板代码 byte[] bytes = new byte[1024]; int len = 0; while ((len = inputStream.read(bytes)) != -1) {// 如果有数据就一直读写,否则就退出循环体,关闭流资源。 System.out.println(new String(bytes, 0, len, "gbk")); } inputStream.close(); }
Lecture de l'objet tampon tampon
// nio 读取 public void testBufferChannel() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); FileChannel fileChannel = inputStream.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); // 以下代码也几乎是Buffer和Channle的标准读写操作。 while (true) { buffer.clear(); int result = fileChannel.read(buffer); buffer.flip(); if (result == -1) { break; } System.out.println(new String(buffer.array(), 0, result, "gbk")); } inputStream.close(); }
Lecture du mappage mémoire
public void testmappedByteBuffer() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); FileOutputStream outputStream = new FileOutputStream(new File("e:/nio/testcopy.txt"),true); FileChannel inChannel = inputStream.getChannel(); FileChannel outChannel = outputStream.getChannel(); System.out.println(inChannel.size()); MappedByteBuffer mappedByteBuffer = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size()); System.out.println(mappedByteBuffer.limit()); System.out.println(mappedByteBuffer.position()); mappedByteBuffer.flip(); outChannel.write(mappedByteBuffer); outChannel.close(); inChannel.close(); outputStream.close(); inputStream.close(); } //基于内存映射这种方式,这么写好像有问题。 MappedByteBuffer和RandomAcessFile这两个类要单独重点研究一下。 //TODO 大文件读取
Pour plus de connaissances sur Java, veuillez faire attention Tutoriel Java de base colonne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!