2013-07-09 28 views
0

我有一個問題。Java - 有沒有像二進制流?

是否有庫或等編寫int &字符串到字節數組?

像:

byte temparray[] = new byte[10]; 

int a = 10; 
int b = 10; 

temparray << new String("12") << a << b; 

感謝。

編輯

byte[] buffer = new byte[649]; 

    byte[] charname = this.getName().getBytes(); 
    System.arraycopy(charname, 0 , buffer, 0, charname.length); 

    for(int i=0;i<16;i++) //mystery crs 16 zeros 
    { 
     buffer[i+17] = (byte)0x30; 
    } 

    buffer[34] = this.faction; 

    if(this.characterClass == 2) 
    { 
     buffer[40] = 2;  
    } else 
    { 
     buffer[40] = 1; 
    } 
    System.arraycopy(BitTools.shortToByteArray(face), 0, buffer, 42, 2); 
    buffer[44] = 1; 
    buffer[48] = (byte)this.characterClass; //class byte 
    buffer[52] = 2; explanation yet 

    buffer[54] = (byte)this.getLevel(); 

這是我的包發生器的例子,我想簡單點,但在包我只用短褲,整數和字符串。

+1

'String'有一個重載的'getBytes()',它返回一個字節數組。 –

+1

你應該考慮*正是*你想要的輸出。你想如何編碼字符串?你想如何編碼整數? –

+0

我想簡單地創建數據包的過程,但首先我需要手動轉換爲使用非最佳替換的字節。 –

回答

5

java.io.ByteArrayOutputStream是一個流式實現,它收集內部字節數組上的內容,並且可以將它包裝在java.io.OutputStreamWriter中以向其寫入字符內容。

ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 
Writer out = new OutputStreamWriter(byteOut, "UTF-8"); // Uses UTF-8 encoding 
out.write("12"); 
out.write(10); 
out.write(10); 
out.close(); 

byte[] bytes = byteOut.toByteArray(); 

在此之後,bytes.length僅僅是寫入byteOut字節足夠長。

+0

我可以指定字符串的長度嗎?如果它的長度小於16個字節,它會被存入0x00嗎? –

+0

@KacperFalat,no。 java中不存在'snprintf'等價物。緩衝區根據需要增長。如果你想NUL墊,你需要自己做。 –

0

是的。見java.io.ByteArrayOutputStream。請注意,您可以打包此流以支持其他類型的字符串寫入:PrintWriter pw = new PrintWriter(yourByteArrayOutputStream); pw.print("Hello");

然後使用yourByteArrayOutputStream.toByteArray();獲取字節數組。

0

http://docs.oracle.com/javase/7/docs/api/

Integer.byteValue(); 
Double.byteValue(); 
String.getBytes(); 
// etc. 
+0

'String.getBytes()'假定平臺編碼不是任何一段代碼的寫入編碼。 –

+1

對於127以上的任何整數,您將失去精度。正如java文檔所示,這些調用可能涉及截斷。 – Aurand

+0

@MikeSamuel您可以隨時使用重載的方法,用於'String'。 –

0

看看String#getBytesByteBuffer。根據您的使用情況,字符和字節順序可能很重要。