ファイルとデータストリーム関数

QIODevice クラスは、Qt Core のすべての I/O デバイスの基本インターフェース・クラスです。QIODevice は、データ・ブロックの読み書きをサポートするデバイスの共通実装と抽象インターフェースの両方を提供します。デバイスは、メモリバッファ、ファイル、データストリームのいずれかになります。

QFile のようないくつかのサブクラスは、データの中間的な格納にメモリ・バッファを使用して実装されている。これにより、読み取り/書き込み操作が削減され、プログラムが高速化される。getChar ()やputChar ()のような関数は、デバイスそのものを直接操作するのではなく、メモリ・バッファ上で操作できるため、バッファリングによって高速化される。

QFile クラスは、ファイルからの読み込みとファイルへの書き込みを行う関数を提供する。QFile は単体で使うこともできるが、QTextStreamQDataStream と一緒に使うとより便利である。

QBuffer を使うと、 インタフェースを使って にアクセスできます。 は標準的なランダム・アクセス・ファイルと同じように扱われます。例を挙げよう:QIODevice QByteArray QByteArray

QBuffer buffer;
char ch;

buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch);  // ch == 'Q'
buffer.getChar(&ch);  // ch == 't'
buffer.getChar(&ch);  // ch == ' '
buffer.getChar(&ch);  // ch == 'r'

open() をコールしてバッファを開く。次に、write() またはputChar() を呼び出してバッファに書き込み、read(),readLine(),readAll(),getChar() を呼び出してバッファから読み込む。size() はバッファの現在のサイズを返し、seek() を呼び出すことで、バッファ内の任意の位置にシークすることができる。バッファへのアクセスが終わったら、close() を呼び出します。

QDataStream クラスは、QIODevice へのバイナリ・データのシリアライズを提供します。 データ・ストリームは、ホスト・コンピュータのオペレーティング・システムやCPU、バイト順序に100%依存しない、エンコードされた情報のバイナリ・ストリームです。例えば、Windows上のPCで書き込まれたデータ・ストリームは、Solarisを実行しているSun SPARCで読むことができる。また、データ・ストリームを使用して、エンコードされていない生のバイナリ・データを読み書きすることもできる。

QDataStream がシリアライズできるデータ型の詳細については、「Qt データ型のシリアライズ」を参照してください。

QTextStream クラスは、テキストの読み書きに便利なインタフェースを提供します。QTextStream は、QIODeviceQByteArrayQString を操作することができます。QTextStream のストリーミング演算子を使用すると、単語、行、数値の読み書きを便利に行うことができます。また、QTextStream を使って、コンソール入力を読み込んだり、コンソール出力を書き込んだりすることも一般的です。

テキスト・ファイルを読むときにQTextStream を使う一般的な方法は3つあります:

  • readLine ()またはreadAll ()を呼び出すことにより、チャンクごとに。
  • QTextStream は、QStrings、QByteArrays、char* バッファへのストリーミングをサポートしています。単語はスペースで区切られ、先頭の空白は自動的にスキップされる。
  • 文字単位。QChar または char 型にストリーミングする。この方法は、文字エンコーディングや行末のセマンティクスに依存せず、ファイル解析時に便利な入力処理を行うためによく使われる。空白をスキップするには、skipWhiteSpace() を呼び出す。

QByteArray は、生のバイト( を含む)と従来の 8 ビット ' \0' 終端文字列の両方を格納するために使用できます。 を使用すると、const char * を使用するよりもはるかに便利です。また、\0 QByteArray 暗黙的な共有クラス(copy-on-write)を使用することで、メモリ使用量を削減し、不要なデータのコピーを避けることができます。

QByteArray に加えて、Qt は文字列データを格納するためにQString クラスも提供しています。ほとんどの目的には、QString が最も適切なクラスです。これは16ビットのUnicode文字を格納します。しかし、未加工のバイナリ・データを格納する必要がある場合や、メモリの節約が重要な場合(Qt for Embedded Linux など)には、QByteArray を使用することをお勧めします。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。