2011-10-18 48 views

回答

6

使用String.getBytes()方法。

+0

但我應該怎麼做,如果我的字節[ ]太大了,當我嘗試從它創建字符串時,它會拋出一個outofmemoryexception? –

+0

@Bombastic使用String.substring(beginIndex,endIndex).getBytes() – adatapost

+0

其實我認爲,將字符串的特定部分轉換爲byte []。我需要相反的。在bye []中獲得前200個字符並將它們串起來。 –

0

將您的字節數組轉換爲Base64字符串然後將其分割。之後在合併階段合併該字符串,然後將結果轉換爲Base64。 或者,如果你的內存限制第一分割你的字節數組一些字節數組

byte[] origBytes = ...; 
//a loop for splitting bytes 
byte[] splittedBytes1 = ...; 
byte[] splittedBytes2 = ...; 
... 
String strbytes1 = Base64.encodeBytes(splittedBytes1); 
String strbytes2 = Base64.encodeBytes(splittedBytes2); 
... 
+0

我沒有看到'Base64.encodeBytes(String)'方法。我錯過了什麼嗎? –

1

如果你需要創建一個字符串,你需要多幾倍的內存比所有字節的大小。

首先,字符串是一個字符數組,字符大小爲2個字節。其次,字符串是一個不可變的對象,所以不可能用現有的數組創建它,所以爲了構造它,字符數組的第二個副本將被創建。如果內存消耗至關重要,請考慮使用CharSequence而不是String

最後,使用StringBuilderStringWriter,如:

String writer = new StringWriter(); 
writer.write(new String(byteArrayChunk1, "UTF-8")); 
... 
writer.write(new String(byteArrayChunkN, "UTF-8")); 
String resultString = writer.toString(); 

UPDATE: 另一種選擇,更美好,我想:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
baos.write(byteArrayChunk1); 
baos.write(byteArrayChunkN); 
String resultString = baos.toString("UTF-8");