2

イベント データ (購入ボタンのクリックなど) を受信し、そのデータを HDFS に書き込む Java REST-API を作成しました。基本的に、データを (JSON で) 送信しているすべてのホストのストリームを開くか、既存のホストを使用して、タイムスタンプ、イベント名、およびホスト名でデータを強化し、(FS)DataOutputStream に書き込みます。

1 public synchronized void writeToFile(String filename, String hostname, String content) throws IOException {
2    FSDataOutputStream stream = registry.getStream(filename, hostname);
3    stream.writeBytes(content);
4    stream.hflush();
5  }

まず、stream.writeChars(content)3 行目で使用した結果、次のようなファイルが作成 .{.".m.e.s.s.a.g.e.".:.".h.e.l.l.o.".} されました。わかりません。

次にstream.writeUTF(content)、3 行目で試してみると、ファイルの見た目はずっと良くなりまし .W{"message":"hello"} た。コードを見ると、 writeUTF(String s) は最初に s のバイト数を送信し、次に文字列自体を送信します。イベント データのバイト数を表します。これ.Wは、イベント データの長さを変えると、ファイル内の先頭の文字が異なる場合に証明されます。

だから私の最後の手段、stream.writeBytes(content). ここではすべて問題ないように見えました: {"message":"hello"}特殊文字が登場するまで: {"message":"hallöchen"}になりまし{"message":"hall.chen"}た。writeBytes は、文字を書き込む前に先頭の 8 ビットをカットします。これらの文字を正しく書き込むには、UTF-8 機能が必要だと思います。

だから、今、私はちょっと迷っています。どうすれば解決できますか?

4

2 に答える 2