ホームページ  >  記事  >  Java  >  NIO の概要と NIO と IO の比較

NIO の概要と NIO と IO の比較

零下一度
零下一度オリジナル
2017-06-27 09:47:491611ブラウズ

1 概要

1.NIO

新しい IO、java1.4 バージョンから導入された新しい IO は、標準 IO を置き換えることができます。

2.Channel

データの読み取りと書き込みが可能なデータ ソースとのオープン接続を表します。この種の読み取りおよび書き込み操作はデータ ブロックに基づいています。

3.バッファ

チャネルはデータを読み書きするためのバッファです。チャネルは読み取ったデータをバッファに格納し、バッファ内のデータをファイルに書き込みます。

4.セレクター

1 つのスレッドが複数のチャネルを監視できるようにします。

5.RandomAccessFile

読み取り、書き込み、およびランダム アクセスの両方をサポートするファイル操作オブジェクト。ファイルのすべてのバイトを含む配列と同等です。

II NIOとIOの比較

1. 基本データ単位

IOはバイトまたは文字を基本単位として使用し、NIOはデータブロックを基本単位として使用します。

2. ブロック

IO 操作はスレッドをブロックしますが、NIO はスレッドをブロックしません。

3. インデックス

IO操作のストリームにはインデックスが無く、操作位置を特定することができません。 NIOデータにはインデックスがあり、操作箇所を指定することができます。

4. ロック

IO はロックをサポートしませんが、NIO はロックをサポートします。ロックの機能はファイルへのアクセスを制御することです。

3 つのチャネル

1. オブジェクトの作成:

入力ストリームと出力ストリームに基づいてオブジェクトを作成します:

InputStream is=new FileInputStream(String name);
FileChannel channel=is.getChannel();

RandomAccessFile オブジェクトに基づいてオブジェクトを作成します

rrリー

2入力に基づく ストリームによって作成されたオブジェクトは入力のみ可能、出力ストリームに基づいて作成されたオブジェクトは出力のみ可能、RandomAccessFile に基づいて作成されたオブジェクトは入力と出力の両方に使用できます。

3. チャネル内のデータにはインデックスがあり、読み取りおよび書き込みの場所を指定できます。

4. よく使用されるメソッド

  • tru​​ncate(long size): 指定されたバイト長のコンテンツを先頭からインターセプトし、残りを削除します。長さがファイルの現在のサイズより大きい場合、この操作は失敗します。

  • 4つのバッファ

NIOは基本的なデータ型ごとにバッファを提供します。操作方法は同じです。ByteBufferを例に挙げて整理してみましょう。

1. 3 つの重要な属性

    position: 現在のカーソル位置。読み取りと書き込みの開始点を決定するために使用されます。
  • limit: 上限。インデックスを除く、読み取りと書き込みの範囲を決定するために使用されます。
  • capacity: 保存できるデータの最大量を決定するために使用される容量。
  • 2. オブジェクトの作成

RandonAccessFile file=new RandomAccessFile(String name ,"rw");
FileChannel channel=file.getChannel();

3.常用方法:

  • put(Object data):将数据写入当前位置,同时将光标向前移动一个数据单位。

  • get():获取当前位置的数据,同时将光标向前移动一个数据单位。

  • flip():通过调整position与limit的值切换读写模式。

  • clear():并非清空缓冲区,而是调整position=0,limit=capacity,mark=-1。

  • array():将ByteBuffer中的数据复制的数组中。

五 MappedByteBuffer

在系统当中建立文件的映射,如果采用读写模式,那么对该映射的操作会反映到文件中。

由于将文件映射到内存中,资源消耗较大,只有在文件较大的情况下才将文件映射到内存中。

获取对象

MappedByteBuffer mbb=channel.map(MapMode mode,long offset,long size);

有3中映射方式:

  • READ_ONLY:映射内容只允许读,不允许修改。

  • READ_WRITE:映射内容既允许读,也允许改,修改内容会反映到文件中。

  • PRIVATE:在本地创建一个副本,读写操作都是针对副本,写不会反映到原始文件中。

以上がNIO の概要と NIO と IO の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。