質問

私のJavaアプリケーション、アーカイブTIBCO RVメッセージをファイルとしてバイトになります。

皆様にお伝えしたくて書き込みの小さなユリとなるとのメッセージです。この方法で作成TibrvMsgオブジェクトからのバイトな構文解析のファイルを構築するオブジェクトです。

問題は私をいファイル読み込み作成されたLinuxボックスをラマアプリをWindowsマシン。エラにより異なる文字セットのファイルを書きます。

それで、何をしたいのは、ログメッセージごとに特定の文字セット(UTF-8)というプラットホームI走っ再生アプリです。このアプリと同じように読み込むファイルを知る前の文字セットのファイルを書きます。私は計画をjava.nioパッケージのため、このバイトから文字セットです。

いう文字セットのTIBRVメッセージバイトの符号化の変容?の答えを見出さなければならないすることができますのでこす。

役に立ちましたか?

解決

あなたは不透明なデータを取っていると、それが思われる、(代わりにあなたが生のバイトとしてそれを書き込み、それかのようにそれを読むしようとしていることの非テキスト部分をエスケープせずにテキストデータとしてファイルに書き込みしようとしますずっと同じ問題である文字ベース)となりました。 これは非常に最初から欠陥がある。

不透明データは無意味として扱われ、単純にそれに対処する方法を知っていないAPIに恩返しするために変更することなく保存する必要があります。データはテキスト形式で保存されなければならないなら、あなたは、の可逆のテキストにバイトを変換する必要があります。適切なエンコーディングは、base64のようなものです。文字セットエンコードの意味でのエンコーディングを使用すると、生のバイナリデータに適用した場合に無損失ではありません。

のバイト、単にそれが上で送信されたメッセージの長さと対象を示す固定長の接頭辞と一緒に(文字ではない)ファイルのバイトを格納することを介してRVメッセージを再生するのに十分ですシステムます。

メッセージ内の任意のテキストベースのフィールドに関連して、あなたがその本来の受信時に持っていただろうとエンコーディング事項は(私は強くアプリを設計する際、一般的に、この異物感を避けることをお勧め)、あなたがリプレイで同じ問題を抱えている場合(できればまったく同じコードを使用して)所望の符号化ソース符号化から変換することであるので、これはリプレイに関して非問題であるべきである。

他のヒント

この(確かにかなり古い)としてメーリングリストのメッセージ少しは、そのネットワークプロトコルの内部構造について知られている、を示しています。これは、あなたが後にしている何をすべきか、かなりの挑戦になるかもしれない。

これは、メッセージがデータのちょうどバイナリブロック(ネットワークから取り込んだもの)であれば、彼らも文字セットを持つべきではない、と述べました。文字セットは、単一の文字は、多くの異なる方法でエンコードすることができますので、それは重要なテキストデータ、のためです。バイナリ・データは文字の外に構成されていないので、その意味でのエンコードがないことができます。

これはおそらく、Java文字列エンコーディング、ないTIBRVに関連しています。これはドキュメントでありますけれどもます:

Strings and Character Encodings 

--------------------------------------------------------------------------------

Rendezvous software uses strings in several roles: 

* String data inside message fields
* Field names
* Subject names (and other associated strings that are not
  strictly inside the message)
* Certified delivery correspondent names
* Group names (fault tolerance)

All these strings (both in C and in wire format) use the character
encoding appropriate to the ISO locale of the sender. For example,
the United States is locale en_US, and uses the Latin-1 character
encoding (also called ISO 8859-1); Japan is locale ja_JP, and uses
the Shift-JIS character encoding. 

When two programs exchange messages within the same locale, strings
are always correct. However, when a message sender and receiver use
different character encodings, the receiving program must convert
between encodings as needed. Rendezvous software does not convert
automatically. 

EBCDIC 
For information about string encoding in EBCDIC environments,
see tibrv_SetCodePages() . 

ですから、マシンのロケールで見たいと思うかもしれません。

いう文字セットの TIBRVメッセージバイト数で符号化される の変容?

そうです。文字セットは変換テキストバイトストリームを開きます。ネットワークデータのバイトストリームに、なんとなく解釈するパーツでテキストとしては、暗黙の内に明示的に指示用の文字セットの問題であるか否かをすることから始まったのだ。

変形バイトから文字セットを別の基本的手段converingテキストを文字セットを返バイトを利用する。この結果とデータの長さを変えて多くの文字セット以上のご使用は1バイトの一部の文字です。このネットワークメッセージが問題となる場合が無効長分野やテキストの原因分野のオーバーフロー.あるんじゃないでしょうかより行ってはならないものとします任意の変換えを教えている読書アプリのための異なる文字セット.

の答えを見出さなければならないすることができますのでこす。

のプロトコル仕様となります。

たInputStreamから[]バイトINTEすべてを読んで、たFileOutputStreamに[]バイトを書き込みます。

NO ReaderまたはWriterは、彼らが文字変換を行うと、それは間違っている、関与すべきである。

あなたがjava.io.を理解するまで、

離れjava.nioでの滞在

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top