2013-09-02 49 views
388

Có cách nào để chuyển đổi Java String sang một số byte[] (không hộp đóng gói Byte[])?Làm thế nào để chuyển đổi chuỗi Java thành byte []?

Trong cố gắng này:

System.out.println(response.split("\r\n\r\n")[1]); 
System.out.println("******"); 
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString()); 

và tôi nhận được kết quả đầu ra riêng biệt. Không thể hiển thị đầu ra thứ nhất vì nó là một chuỗi gzip.

<A Gzip String> 
****** 
[[email protected] 

Địa chỉ thứ hai là địa chỉ. Có điều gì tôi đang làm sai? Tôi cần kết quả trong một byte[] để đưa nó vào bộ giải nén gzip, như sau.

String decompressGZIP(byte[] gzip) throws IOException { 
    java.util.zip.Inflater inf = new java.util.zip.Inflater(); 
    java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip); 
    java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein); 
    java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream(); 
    int res = 0; 
    byte buf[] = new byte[1024]; 
    while (res >= 0) { 
     res = gzin.read(buf, 0, buf.length); 
     if (res > 0) { 
      byteout.write(buf, 0, res); 
     } 
    } 
    byte uncompressed[] = byteout.toByteArray(); 
    return (uncompressed.toString()); 
} 
+2

http://stackoverflow.com/questions/5499924/convert-java-string-to-byte-array – Paddyd

+0

Xin lỗi , Tôi đang cố gắng để chuyển đổi một String để bytearray và trở lại và nhận được một kết quả sai. Tôi sẽ chỉnh sửa nó trong một thời gian và quay trở lại. –

+6

Vấn đề của bạn là 'String.getBytes()' thực sự trả về một mảng byte, nhưng niềm tin của bạn rằng 'toString()' của một mảng byte sẽ trả lại kết quả hữu ích là không chính xác. –

Trả lời

739

Đối tượng phương pháp của bạn decompressGZIP() cần là một byte[].

Vì vậy, câu trả lời kỹ thuật cơ bản cho câu hỏi bạn đã hỏi là:

byte[] b = string.getBytes(); 
byte[] b = string.getBytes(Charset.forName("UTF-8")); 
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only 

Tuy nhiên vấn đề bạn dường như đang vật lộn với là điều này không hiển thị rất tốt. Gọi số toString() sẽ chỉ cung cấp cho bạn số Object.toString() mặc định là tên lớp + địa chỉ bộ nhớ. Trong kết quả của bạn [[email protected], [B có nghĩa là byte[]38ee9f13 là địa chỉ bộ nhớ, được phân tách bằng một @.

Đối với mục đích hiển thị, bạn có thể sử dụng:

Arrays.toString(bytes); 

Nhưng điều này sẽ chỉ hiển thị như một chuỗi các số nguyên bằng dấu phẩy, mà có thể hoặc không thể là những gì bạn muốn.

Để có được một thể đọc được String trở lại từ một byte[], sử dụng:

String string = new String(byte[] bytes, Charset charset); 

Lý do phiên bản Charset được ưa chuộng, đó là tất cả String đối tượng trong Java được lưu trữ nội bộ như UTF-16. Khi chuyển đổi thành một số byte[], bạn sẽ nhận được phân tích các byte khác nhau cho các hình thái đã cho của String, tùy thuộc vào bộ ký tự đã chọn.

+58

byte [] b = string.getBytes ("UTF-8") hoạt động quá –

+24

string.getBytes ("UTF-8") yêu cầu xử lý UnsupportedEncodingException, trong khi string.getBytes (Charset.forName ("UTF-8")) không làm. Tranh luận về phương pháp nào là "tốt hơn" tôi để lại như một bài tập cho người đọc. –

+16

'string.getBytes (StandardCharsets.UTF_8)' cũng có thể được sử dụng, và nó giống như 'string.getBytes (Charset.forName (" UTF-8 "))' –

40
String example = "Convert Java String"; 
    byte[] bytes = example.getBytes(); 
+1

Hãy coi chừng: [getBytes()] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes()) là nền tảng phụ thuộc. Lựa chọn tốt hơn là sử dụng [getBytes (StandardCharsets.UTF_8)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes (java.nio.charset.Charset)) –

8

Bạn có thể sử dụng String.getBytes() trả về mảng byte[].

12

Thử sử dụng String.getBytes(). Nó trả về một byte [] biểu diễn dữ liệu chuỗi. Ví dụ:

String data = "sample data"; 
byte[] byteData = data.getBytes(); 
11

Đơn giản chỉ cần:

String abc="abcdefghight"; 

byte[] b = abc.getBytes(); 
6

Bạn có thể muốn thử return new String(byteout.toByteArray(Charset.forName("UTF-8")))

+1

Cảm ơn bạn đã hiển thị cách khác từ byte đến Chuỗi. – Trismegistos

0
import java.io.UnsupportedEncodingException; 
import java.util.Arrays; 

public class ConvertStringtoByte { 
    public static void main(String[] args) throws UnsupportedEncodingException { 


    String givenString = "stackoverflow"; 
    System.out.println(givenString); 


    byte[] byteValue = givenString .getBytes(); 

    System.out.println(Arrays.toString(byteValue)); 


    byte[] byteValueAscii= letters.getBytes("US-ASCII"); 
    System.out.println(Arrays.toString(byteValueAscii)); 
    } 
} 
0

Nó không phải là cần thiết để thay đổi java như một tham số String. Bạn cần phải thay đổi mã c để nhận được một chuỗi mà không có một con trỏ và trong mã của nó:

Bool DmgrGetVersion (String szVersion); 

Char NewszVersion [200]; 
Strcpy (NewszVersion, szVersion.t_str()); 
.t_str() applies to builder C++ 2010 
Các vấn đề liên quan