public class FixedLengthDataRecordFormatter extends DataRecordFormatterSupport
本クラスはスレッドセーフを考慮した実装にはなっていないので、呼び出し元で同期化の制御を行うこと。
ディレクティブの設定固定長ファイルデータを読み込む際は、以下のディレクティブの設定が必須となる。
また、任意で以下のディレクティブの設定を行うことができる。
 レコード終端文字列は、許容する文字列のみ指定できる。
 デフォルトでは「\n」「\r」「\r\n」の3種類の文字列をレコード終端文字列として許容するが、
 それを変更したい場合は、任意の許容する文字列のリストをFormatterFactoryクラスのallowedRecordSeparatorListプロパティに設定すること。
 
 ゾーンおよびパック数値の符号ビットは、フィールド単位のみでなく、ファイル単位およびシステム単位でも指定できる。
 「フィールド単位 > ファイル単位 > システム単位」の優先度順で、使用する符号ビットが決定される。
 符号ビットをファイル単位で指定する場合はディレクティブ、システム単位で指定する場合はコンポーネント設定ファイルで定義する。
 
 数値文字列のディレクティブについての詳細は
 NumberStringDecimalの
 Javadocを参照すること。
 
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
FixedLengthDataRecordFormatter.FixedLengthDirective
固定長ファイルフォーマッタが使用するディレクティブの名前と値の型。
 以下に一覧を示す。 
positive-zone-sign-nibble:String negative-zone-sign-nibble:String positive-pack-sign-nibble:String negative-pack-sign-nibble:String fixed-sign-position:Boolean required-plus-sign:Boolean  | 
DataRecordFormatterSupport.Directive| Constructor and Description | 
|---|
FixedLengthDataRecordFormatter()
デフォルトコンストラクタ。
 デフォルトでは、FixedLengthConvertorSettingをコンバータとして使用する。 
 | 
| Modifier and Type | Method and Description | 
|---|---|
void | 
close()
内部的に保持している各種リソースを開放する。 
 | 
protected java.lang.Object | 
convertToField(byte[] source,
              FieldDefinition field)
入力ストリームから1レコード分のフィールドの内容を読み込み、コンバータを用いて変換したオブジェクトを返却する。
 入力ストリームが既に終端に達していた場合はnullを返却する。 
 | 
protected DataRecord | 
convertToRecord(byte[] bytes,
               RecordDefinition recordDef)
1レコード分の固定長レコードを読み込み、
 DataRecord型のオブジェクトとして返却する。
 入力ストリームが既に終端に達していた場合はnullを返却する。 
 | 
protected java.util.Map<java.lang.String,DataRecordFormatterSupport.Directive> | 
createDirectiveMap()
使用するディレクティブの名前とDirectiveのMapを生成する。
 サブクラスで使用するディレクティブを追加する場合は、本メソッドをオーバーライドし、任意のディレクティブを追加すること。 
 | 
protected void | 
determinePackNibble(java.util.Map<java.lang.String,java.lang.Object> directive)
パックNibbleと、それぞれの符号ビットの設定を行う。 
 | 
protected void | 
determineZoneNibble(java.util.Map<java.lang.String,java.lang.Object> directive)
ゾーンNibbleおよび符号ビットの設定を行う。 
 | 
ConvertorSetting | 
getConvertorSetting()
固定長データのコンバータの設定情報保持クラスを取得する。 
 | 
boolean | 
hasNext()
次に読み込む行の有無を判定する。 
 | 
DataRecordFormatter | 
initialize()
フォーマット定義情報保持クラスの初期化を行う。
 初期化は本メソッドの1回目の実行時のみ行われ、2回目以降の実行時に初期化は行われない。 
 | 
void | 
initializeField(java.util.Map<java.lang.String,java.lang.Object> directive)
フィールドを初期化する。
 
  
DataRecordFormatterSupportでは、ディレクティブに設定された以下の値をフィールドに設定する。
 
 レコード終端文字列
 文字エンコーディング
  | 
DataRecord | 
readRecord()
入力ストリームから1レコード分のデータを読み込み、データレコードを返却する。
 入力ストリームが既に終端に達していた場合は 
nullを返却する。 | 
DataRecordFormatterSupport | 
setDataTypeProperty(DataType<?,?> dataType)
ゾーン/パック数値の符号ビットの設定および、
 数値文字列の小数点の要否、符号位置の固定/非固定、正の符号の要否の設定を行う。
 また、各データタイプに空文字列を 
nullに変換するかどうかの設定を行う。 | 
DataRecordFormatter | 
setInputStream(java.io.InputStream stream)
入力ストリームを設定する。 
 | 
DataRecordFormatter | 
setOutputStream(java.io.OutputStream stream)
出力ストリームを設定する。 
 | 
protected void | 
validateDirectives(java.util.Map<java.lang.String,java.lang.Object> directive)
ディレクティブの内容の妥当性を検証する。 
 | 
protected void | 
validateNibble(java.lang.String key,
              java.lang.String value)
符号ビットが半角英数字で構成されているか検証する。 
 | 
protected void | 
validateRecordLength(int head,
                    RecordDefinition record)
レコード長の妥当性を検証する。 
 | 
protected void | 
writeField(java.util.Map<java.lang.String,?> record,
          FieldDefinition field)
このオブジェクトのフォーマット定義に従って、
 出力ストリームにフィールドの内容を書き込む。 
 | 
void | 
writeRecord(java.util.Map<java.lang.String,?> record)
出力ストリームに1レコード分の内容を書き込む。
 
 出力時に使用するデータレイアウト(レコードタイプ)は、 
Mapの内容をもとに自動的に判定される。
 
 引数がDataRecord型かつレコードタイプが指定されている場合、
 フォーマット定義ファイルのレコードタイプ識別フィールド定義よりも、指定されたレコードタイプを優先して書き込みを行う。 | 
protected void | 
writeRecord(java.util.Map<java.lang.String,?> record,
           RecordDefinition recordDef)
このオブジェクトのフォーマット情報に従って、
 出力ストリームに1レコード分の内容を書き込む。 
 | 
void | 
writeRecord(java.lang.String recordType,
           java.util.Map<java.lang.String,?> record)
指定したデータレイアウト(レコードタイプ)で、出力ストリームに1レコード分の内容を書き込む。 
 | 
addConvertorToField, addFormatAndRecordNumberTo, createCharacterReplacer, getDefaultEncoding, getDefinition, getFileType, getMimeType, getRecordNumber, getRecordSeparator, incrementRecordNumber, initializeClassifier, initializeDefinition, initializeFieldDefinition, newInvalidDataFormatException, setAllowedRecordSeparatorList, setDefaultReplacementType, setDefinition, setFieldProperty, setRecordNumber, setValueConvertorProperty, validateDirectivesDataType, validatePosition@Published(tag="architect") public FixedLengthDataRecordFormatter()
public ConvertorSetting getConvertorSetting()
getConvertorSetting in class DataRecordFormatterSupportprotected java.util.Map<java.lang.String,DataRecordFormatterSupport.Directive> createDirectiveMap()
createDirectiveMap in class DataRecordFormatterSupportpublic DataRecordFormatter initialize()
initialize in interface DataRecordFormatterinitialize in class DataRecordFormatterSupportpublic DataRecordFormatter setInputStream(java.io.InputStream stream)
stream - 入力ストリームpublic DataRecordFormatter setOutputStream(java.io.OutputStream stream)
stream - 出力ストリームprotected void validateDirectives(java.util.Map<java.lang.String,java.lang.Object> directive)
 サブクラスで独自のディレクティブを使用する場合は、このメソッドをオーバーライドし、独自のディレクティブに対して妥当性検証を行うこと。
 
 DataRecordFormatterでは以下の仕様を満たしているかどうかの検証を行う。
 
 妥当性検証に失敗した場合は、SyntaxErrorExceptionがスローされる。
 
validateDirectives in class DataRecordFormatterSupportdirective - ディレクティブpublic void initializeField(java.util.Map<java.lang.String,java.lang.Object> directive)
DataRecordFormatterSupportでは、ディレクティブに設定された以下の値をフィールドに設定する。
 FixedLengthDataRecordFormatterでは、ディレクティブまたはコンポーネント設定ファイルに設定された以下の値をフィールドに設定する。
 initializeField in class DataRecordFormatterSupportdirective - ディレクティブprotected void validateNibble(java.lang.String key,
                              java.lang.String value)
key - 符号ビットが設定されたディレクティブのキーvalue - 符号ビットの設定値protected void validateRecordLength(int head,
                                    RecordDefinition record)
validateRecordLength in class DataRecordFormatterSupporthead - 位置record - レコード定義情報保持クラスpublic DataRecordFormatterSupport setDataTypeProperty(DataType<?,?> dataType)
nullに変換するかどうかの設定を行う。setDataTypeProperty in class DataRecordFormatterSupportdataType - データタイプpublic DataRecord readRecord() throws java.io.IOException, InvalidDataFormatException
nullを返却する。java.io.IOException - 入力ストリームの読み込みに失敗した場合InvalidDataFormatException - 読み込んだデータがフォーマット定義に違反している場合protected DataRecord convertToRecord(byte[] bytes, RecordDefinition recordDef) throws java.io.IOException
bytes - 入力データrecordDef - レコード定義情報保持クラスjava.io.IOException - 読み込みに伴うIO処理で問題が発生した場合。protected java.lang.Object convertToField(byte[] source,
                                          FieldDefinition field)
                                   throws java.io.IOException
source - 入力ストリームfield - フィールド定義情報保持クラスjava.io.IOException - 読み込みに伴うIO処理で問題が発生した場合。public void writeRecord(java.util.Map<java.lang.String,?> record)
                 throws java.io.IOException,
                        InvalidDataFormatException
Mapの内容をもとに自動的に判定される。
 
 引数がDataRecord型かつレコードタイプが指定されている場合、
 フォーマット定義ファイルのレコードタイプ識別フィールド定義よりも、指定されたレコードタイプを優先して書き込みを行う。record - 出力するレコードの内容を格納したMapjava.io.IOException - 出力ストリームの書き込みに失敗した場合InvalidDataFormatException - 書き込むデータの内容がフォーマット定義に違反している場合public void writeRecord(java.lang.String recordType,
                        java.util.Map<java.lang.String,?> record)
                 throws java.io.IOException
recordType - レコードタイプrecord - 出力するレコードの内容を格納したMapjava.io.IOException - 出力ストリームの書き込みに失敗した場合protected void writeRecord(java.util.Map<java.lang.String,?> record,
                           RecordDefinition recordDef)
                    throws java.io.IOException
record - 出力するレコードの内容を格納したMaprecordDef - レコード定義情報保持クラスjava.io.IOException - 書き込みに伴うIO処理で問題が発生した場合。protected void writeField(java.util.Map<java.lang.String,?> record,
                          FieldDefinition field)
                   throws java.io.IOException
record - 出力するレコードの内容を格納したMapfield - フィールド定義情報保持クラスjava.io.IOException - 書き込みに伴うIO処理で問題が発生した場合。protected void determineZoneNibble(java.util.Map<java.lang.String,java.lang.Object> directive)
ゾーンNibbleは使用するエンコーディングに従って決定する。
 システム単位で使用する符号ビットはコンポーネント設定ファイルに、
 ファイル単位で使用する符号ビットはフォーマット定義ファイルのディレクティブに定義する。
 「ファイル単位>システム単位」の優先度順で使用する符号ビットが決定される。
 システム単位およびファイル単位、どちらにも符号ビットが定義されていない場合は、以下の既定値を使用する。
 
 - ascii互換のエンコーディングを使用する場合
     正) 0x30 負) 0x70
 - ebcdic互換のエンコーディングを使用する場合
     正) 0xC0 負) 0xD0
 
 もしフィールド単位で符号ビットが設定された場合は、それが最優先で符号ビットとして使用される。
 directive - ディレクティブprotected void determinePackNibble(java.util.Map<java.lang.String,java.lang.Object> directive)
パックNibbleは使用するエンコーディングに従って決定する。
 システム単位で使用する符号ビットはコンポーネント設定ファイルに、
 ファイル単位で使用する符号ビットはフォーマット定義ファイルのディレクティブに定義する。
 「ファイル単位>システム単位」の優先度順で使用する符号ビットが決定される。
 システム単位およびファイル単位、どちらにも符号ビットが定義されていない場合は、以下の既定値を使用する。
 
 - ascii互換のエンコーディングを使用する場合
     正) 0x03 負) 0x07
 - ebcdic互換のエンコーディングを使用する場合
     正) 0x0C 負) 0x0D
 
 もしフィールド単位で符号ビットが設定された場合は、それが最優先で符号ビットとして使用される。
 directive - ディレクティブpublic void close()
setInputStream(java.io.InputStream)メソッドおよびsetOutputStream(java.io.OutputStream)メソッドで渡されたストリームをクローズする。public boolean hasNext()
                throws java.io.IOException
truejava.io.IOException - 入力ストリームの読み込みに失敗した場合