Javaでファイルを読み取るにはどうすればよいですか?

リリース: 2019-12-04 10:01:05
オリジナル
4626 人が閲覧しました

Javaでファイルを読み取るにはどうすればよいですか?

従来の入力ストリームメソッド、nio ベースの Buffer バッファオブジェクトとパイプ読み取りメソッド、またはファイルを読み取るための非常に高速なメモリマッピングに基づいて、ファイルを読み取る方法は数多くあります。

Java でファイルを読み取る 4 つの方法: (推奨: java ビデオ チュートリアル )

1. RandomAccessFile: ランダム読み取り、比較的遅い、利点は、このタイプがreadable 書き込み可能および操作可能なファイル ポインタ

2. FileInputStream: io 通常の入力ストリーム モード、平均速度と効率

3. バッファ バッファ読み取り: nio バッファおよび FileChannel 読み取りに基づいて、より高速

4. メモリ マップされた読み取り: MappedByteBuffer に基づく、最速の

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();
}
ログイン後にコピー

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();
}
ログイン後にコピー

バッファ バッファ オブジェクトの読み取り

// 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();
}
ログイン後にコピー

メモリ マッピングの読み取り

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 大文件读取
ログイン後にコピー
Java の詳細については、注意してください

Java 基本チュートリアル## # カラム。

以上がJavaでファイルを読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート