2017-05-07 3 views
0

jsonレスポンスが受信され、文字列json形式に変換されるREST-APIを実装しようとしています。ストリームを開くことによって、この文字列の内容をMapr FSに書き込もうとしています。Mapr FSに文字列コンテンツを書き込んでいる間にチャンクが追加されました

FileSystem mfsHandler; 

... 
... 

fsDataStream = mfsHandler.create(new Path("/demo/test.txt"), true); 

String name = "Just to test"; 
byte[] namebytes = name.getBytes(); 
// fsDataStream.write(namebytes); 
BufferedOutputStream bos = new BufferedOutputStream(fsDataStream); 
bos.write(namebytes); 

ただし、コンテンツの書き込み時には、8ビット右に文字列をシフトする8ビットが追加されています。 出力は次のとおりです。 ¬Ã^ @^EJustは

をテストするために、私はポストhttp://stackoverflow.com/questions/19687576/unwanted-chars-written-from-java-rest-api-to-hadoopdfs-using-fsdataoutputstream次試みたが、解決策を得ることができませんでした。

このジャンクチャットを避けるには? 8ビットの右シフトを避けるための代替手段はありますか?

答えて

0

ここでの問題は、Java文字列のエンコーディングと関係があります。 getBytesを呼び出すときに使用するエンコードを選択できます。あなたは文字セットを指定せずにgetBytes()を呼び出すと

Sample text üø 漢字 - UTF-8 
53 61 6d 70 6c 65 20 74 65 78 74 20 c3 bc c3 b8 
20 e6 bc a2 e5 ad 97 


Sample text üø 漢字 - UTF-16 
fe ff 00 53 00 61 00 6d 00 70 00 6c 00 65 00 20 
00 74 00 65 00 78 00 74 00 20 00 fc 00 f8 00 20 
6f 22 5b 57 


Sample text üø 漢字 - SHIFT_JIS 
53 61 6d 70 6c 65 20 74 65 78 74 20 3f 3f 20 8a 
bf 8e 9a 

:ここ

public void testEncoding() throws UnsupportedEncodingException { 
    String s = "Sample text üø 漢字"; 

    asHex(System.out, s, "UTF-8"); 
    asHex(System.out, s, "UTF-16"); 
    asHex(System.out, s, "SHIFT_JIS"); 
} 

public void asHex(PrintStream out, String msg, String encoding) throws UnsupportedEncodingException { 
    byte[] buf = msg.getBytes(encoding); 
    System.out.printf("\n\n%s - %s\n", msg, encoding); 
    for (int i = 0; i < buf.length; i++) { 
     byte b = buf[i]; 
     System.out.printf("%02x ", b & 0xff); 
     if (i % 16 == 15) { 
      System.out.printf("\n"); 
     } 
    } 
    System.out.printf("\n"); 
} 

出力されます。

例えば、ここでは三つの異なるエンコーディングのためにバイトを出力小さなプログラムですそれを使用するには、あなたのデフォルトの文字セットがあればそれを得るでしょう。それは場所のいたるところで変わる可能性があります。したがって、あなたが望むものを指定することは、ほとんど常により良いことです。

関連する問題