2017-09-06 14 views
0

私は、レコードの長さを指定するフィールドに関する以下の仕様を持つMarc21バイナリデータレコードをデコードしようとしています。AkcreamのMarc21バイナリデコーダ

全体の長さに等しい、コンピュータ生成の5文字の数字。それ自体とレコードターミネータを含みます。番号 は右詰めであり、未使用位置にはゼロが含まれています。

私は、しかし、私はちょうどそのフィールドのサイズを指定する方法がわからない、

アッカストリームFraming.lengthFieldを使用しようとしています。私は文字が8ビット、多分16の数字であることを想像します。確かではありませんが、それはプラットフォームや言語に依存するのだろうかと思います。要するに、問題は、私がScala/Javaにいることを知っているそのフィールドのサイズが何であるかを言うことが可能になることです。

また何を意味:?番号は右詰め、未使用の位置は

適切に収集した場合は、1つの値を読み込む方法についての意味合いを持っている

「ゼロを含むある

これについて誰かが分かっている場合は、共有してください。

EDIT1

コンテキスト:

私は第一段階のsysコマンドの結果を処理することになるが、非構造化バイトchunckの流れであるシンフォニー(ベンダー目録システム)サーバー、に対して走ったストリーム処理グラフを構築しようとしていますこれは全体として、要求されたMarc21レコード(完全ダンプまたは部分ダンプ)を表します。

処理するとは、その構造化されていないバイトのストリームを、フレームがレコードであるフレームのストリームにチャンクすることです。

つまり、その時点で1つのレコードのバイトを準備し、それを次のステージに個別に送信します。

次の段階では、そのレコード(バイト)をApache Kafkaに送信します。

明らかに、排出段階はプロセスをスピードアップするために完全に並列化されます。

Symphonyサーバーには、特にネットワーク経由で、要求時にダンプをストリーミングする機能がありません。したがって、このAkkaストリームベースのグラフ処理は、高速なデータインフラストラクチャにおけるダンプの迅速な処理/生産と全体的なストリーミング処理のために、その作業を実行します。 @badcook入力に基づいて

EDIT2

ComputeFramesizeがここで使用することができれば、私は疑問に思います。私はその関数によってちょっと混乱しているのではないか、パラメータには何が含まれているのかわかりません。

ほとんど明確にされません。

+0

今後、この種の質問を2つに分割し、すべての情報を含めてお勧めします。あなたのAkkaストリームのフレーミングに関する質問は、MARCの仕様に関するあなたの(暗示された)質問とはまったく異なり、したがって2つの別々の質問に属します。あなたは、あなたの質問の重要な部分(重要ではないにしても)であっても、MARCはまったく言及していませんでした。 (質問とタイトルにMARCを記述して少なくとも記述している場合は、私の投票を削除します) – badcook

答えて

1

MARC 21 recordsを解析しようとしているようです。

その場合は、MARC4Jを見て、それを使用することをお勧めします。

もしそれをAkkaストリームに統合したいのであれば、MARCレコードを独自の方法で解析したい場合でも、MARC 21レコードターミネーター(ASCII制御文字1D)を使ってFraming.delimiterでバイト蒸気を分割することをお勧めします。 MARCレコードの断片をストリーミングして作業するのではなく、完全なMARCレコードを作成します。それはもっと楽になるでしょう。

具体的な質問について:MARC 21仕様では、構造について言えば、生のバイトではなく文字を使用しています。生のバイトにはUTF-8とMARC 8の2つの文字エンコーディングが指定されています。どちらも可変幅のエンコーディングです。したがって、すべての文字が1バイトであることは事実ではありません。文字が何バイトを占めるかという単一の答えはありません。

「[右揃えと未使用の位置にゼロが含まれています]」という別の表現方法は、数字が左から0で埋められるということです。この場合、この行は、数値ストリングが5文字でなければならない大きな引用から来ています。つまり、数字1を表現しようとしている場合は、それを00001と表す必要があります。

+0

私は最初にframe.delimiterを使用しようとしましたが、その解決策はまったく機能しませんでした。その理由は、レコードターミネータはセパレータではなく、レコードに含まれるものであるためです。言い換えると、フレームはレコードターミネータのないフレームを返します。 marc4jのようなlibで後で解析すると、この問題が発生します。 – MaatDeamon

+0

私の前のコメントが示唆するように、はい、私はmarc21レコードを処理しようとしています。しかし、私はストリーム処理チェーンを構築する必要がありますが、marc21レコードを読むことが始まりです。 – MaatDeamon

+0

私はすでにmarc4jと協力しています。 – MaatDeamon

関連する問題