2016-05-18 10 views
1

JavaプログラムでメッセージのクラスがStringの値しか使用されておらず、binaryというデータはありません。バイナリデータを文字列に変換して戻すと、Javaでデータが失われることはありますか?

私はrpmファイルを送信したいので、binaryというデータをこのメッセージングクラスを通じてreceiverに送信します。私はこれを知っている

receiving端にbinaryファイルに戻し、その後messaging最後にStringbinaryデータを変換し、ことによって行うことができます。私の質問があるしかし

は、任意のデータがbinaryファイルとして保存し、再度binary dataからStringに私のbinaryファイルを変換する間に失われます、またはデータがすべての変換によって保持されますか?

+0

これは依存します。どのようにバイナリデータを*エンコードするつもりですか? –

+0

いくつかのエキゾチックな実装を使用しない場合、何も失うことはありません。例えばBase64を見て、バイト配列をStringに変換したり、その逆に変換することができます:https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64 .html – Berger

+0

@ElliottFrisch私はデザインのその部分をまだ考えていませんでしたが、私の選択肢は何ですか? – jgr208

答えて

1

バイナリデータの意味byte[], InputStream, OutputStream。そしてjavaは内部的にUnicodeをテキストのために使用します:String, char, Reader, Writer

はしたがって一つはテキストのみを表すバイナリデータを変換する必要があり、また、そのバイナリデータの符号化を指定:それは、特定の符号化のために違法とすることができるように、

byte[] bytes = ... 
String s = new String(bytes, StandardCharsets.UTF_8); 
bytes = s.getBytes(StandardCharsets.UTF_8); 

非テキストデータを変換すべきではないと特にUTF-8をエンコードするマルチバイトの場合 また、Unicodeへの変換は不要な非効率性です。例えば、Javaのcharは2バイト(UTF-16エンコード)です。

いくつかの目的でByteArrayInputStream, ByteArrayOutputStream, ByteBufferを使用すると便利です。決してストリング。頑固な場合は、StandardCharsets.ISO_8859_1を使用してください。

関連する問題