Skip to main content
Interwork Corporation
IDR Solutions Product Support Portal
PDF開発用語集 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動

RandomAccessOutputStream

RandomAccessOutputStreamは、Apache PDFBoxが提供するユーティリティクラスで、PDFコンテンツの書き込みにランダムアクセス機能を備えた出力ストリームの実装です。

キーワード: randomaccessoutputstream, RandomAccessOutputStream

概要

RandomAccessOutputStreamは、Apache PDFBoxが提供するユーティリティクラスで、PDFコンテンツの書き込みにランダムアクセス機能を備えた出力ストリームの実装です。標準的な順次出力ストリームとは異なり、ストリーム内の任意の位置に書き込みポインタを配置できるため、 ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) 仕様に準拠したPDFファイルの構築に不可欠です。このクラスは、相互参照テーブルの書き込みやオブジェクトストリームの更新など、特定のバイトオフセットを更新する必要があるPDF文書の作成や修正において特に有用です。

定義

RandomAccessOutputStreamは、Apache PDFBoxライブラリが提供する特殊化されたJava出力ストリームクラスで、標準的な出力ストリーム機能をランダムアクセス書き込み操作で拡張したものです。FileOutputStreamByteArrayOutputStreamのような従来の出力ストリームは順次書き込みのみをサポートしますが、RandomAccessOutputStreamは開発者が特定のバイト位置にシークし、その位置でデータを書き込んだり上書きしたりすることを可能にします。この双方向の機能—前方への書き込みと後方へのシーク—が、標準的なJava I/Oストリームとの違いです。

このクラスは通常、基盤となるストレージメカニズム(ファイルやメモリバッファなど)をラップし、内部で位置追跡を管理します。順次書き込み操作と位置ベースのアクセスの両方のメソッドを実装し、標準的なJavaストリームの順次性とPDFファイル構造操作のランダムアクセス要件との橋渡しを提供します。これにより、 ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で定義されているPDF文書の複雑な内部構造を扱う際に不可欠なコンポーネントとなります。

重要性

PDFの生成と操作に取り組む開発者にとって、RandomAccessOutputStreamは重要です。なぜなら、PDFファイル形式は非順次的な書き込みパターンを必要とするためです。PDFファイル形式は文書全体にオブジェクトを格納し、各オブジェクトへのバイトオフセットを記録する相互参照テーブルを維持します。プログラムでPDFを作成または修正する際、開発者はまずコンテンツを書き込み、その後以前の位置に戻って参照、長さ、または相互参照エントリを更新する必要があることがよくあります。

ランダムアクセス機能がなければ、適切に構造化されたPDFファイルを作成するには、複雑なメモリ内表現を維持するか、データに対して複数回のパスを行う必要があります。RandomAccessOutputStreamは、特定の場所での即座の更新を可能にすることでこのプロセスを簡素化し、メモリオーバーヘッドを削減し、パフォーマンスを向上させます。これは、大きなPDFファイルを扱う場合や、 ( Citation: N.A., (N.A.). (). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) で指定されているアクセシビリティ機能を維持する必要がある文書のPDFワークフローで一般的な増分更新などの機能を実装する場合に特に重要です。

仕組み

RandomAccessOutputStreamは、ストリーム内の現在の書き込み位置を追跡する内部位置ポインタを維持することで動作します。write()のような標準的な出力ストリームメソッドを使用してデータが書き込まれると、データは現在の位置に配置され、ポインタは自動的に進みます。このクラスは、開発者がストリーム内の任意の有効なバイトオフセットに書き込みポインタを移動できるようにするseek()または類似の位置決めメソッドも提供します。

一般的なワークフローは次のとおりです:

  1. 順次書き込み:PDFオブジェクト、ストリーム、コンテンツを前方向に書き込む
  2. 位置追跡:後で特定の更新が必要になるバイトオフセットを記録する
  3. シーク:書き込みポインタを以前に記録した位置に戻す
  4. 更新:特定のバイトまたはセクションを正しい値(オブジェクトの長さや相互参照エントリなど)で上書きする
  5. 最終化:トレーラーと相互参照テーブルを書き込んでPDF構造を完成させる

このクラスはバッファリングを処理し、シーク操作がデータの整合性を維持することを保証し、出力内のギャップや破損を防ぎます。 ( Citation: , (). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) で概説されている適切な文書構造を必要とするTagged PDFを扱う場合、RandomAccessOutputStreamは構造要素とコンテンツストリーム間の正しい参照を維持するために必要な正確なバイトレベルの操作を可能にします。

内部的には、実装はファイルベースの操作にRandomAccessFileを使用したり、メモリ内操作に拡張可能なバイト配列を使用したりすることがありますが、これらの詳細を開発者から抽象化しながら、ランダムアクセス書き込みのための一貫したインターフェースを提供します。

関連用語

  • COSStream – RandomAccessOutputStreamを使用して書き込まれる可能性のあるPDFストリームオブジェクトを表すPDFBoxクラス
  • PDDocument – ファイル操作にRandomAccessOutputStreamを利用するPDF文書を表すApache PDFBoxのメインクラス
  • Cross-reference table(相互参照テーブル) – ランダムアクセス書き込み機能を必要とするバイトオフセットを格納するPDFファイル構造コンポーネント
  • Incremental update(増分更新) – 既存のファイルに変更を追加するPDF修正技術で、ランダムアクセスストリームを使用することが多い
  • RandomAccessRead – PDFファイルのランダムアクセス読み取り操作のための補完的なPDFBoxインターフェース

出典

(N.A.) (2020)
(N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
PDF Association (2023)
(). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
(N.A.) (2014)
(N.A.). (). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html