Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
133 views
in Technique[技术] by (71.8m points)

java - Conversion of byte[] into a String and then back to a byte[]

I am working on a proxy server. I am getting data in byte[] which I convert into a String to perform certain operations. Now when i convert this new String back into a byte[] it causes unknown problems.

So mainly its like I need to know how to correctly convert abyte[] into a String and then back into a byte[] again.

I tried to just convert the byte[] to String and then back to byte[] again (to make sure thats its not my operations that are causing problems).

So it's like:

// where reply is a byte[]

String str= new String(reply,0, bytesRead);
streamToClient.write(str.getBytes(), 0, bytesRead);

is not equivalent to

streamToClient.write(reply, 0, bytesRead);

my proxy works fine when I just send the byte[] without any conversion but when I convert it from byte[] to a String and then back to a byte[] its causes problems.

Can some one please help? =]

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The best way to convert a byte[] to String and back into a byte[] is not to do it at all.

If you have to, you must know the encoding that was used to produce the byte[], otherwise the operation uses the platform default encoding, which can corrupt the data because not all encodings can encode all possible strings, and not all possible byte sequences are legal in all encodings. This is what's happening in your case.

As for how to find out the encoding, that depends:

  • If you're using HTTP, look at the Content-Type header
  • If your data is XML, you should be using an XML parser, which will handle the encoding for you
  • If your data is HTML pages, there might also be a <meta http-equiv> header

If there is no way to find out the encoding you have random garbage, not text data.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...