2011-10-14 85 views
0

我正在尋找一個簡單的方法是我可以在一些字節傳遞,作爲可變參數,並得到一個byte []返回,如:有沒有像字節(byte ... b):byte []?

static byte[] byteArray(byte ...bytes){ return bytes;} 

我發現迄今...

java.lang.Byte沒有它
java.util.Arrays沒有它
com.google.common.primitives.Bytes.toArray(..)希望集合

樣本用法:assertThat(actualArray,is(byteArray(1,2,3,4,5)));

+0

爲什麼byteArray(1,2,3,4,5)比'new byte [] {1,2,3,4,5}'更好? –

+0

你剛纔寫的方法!你可以使用它! –

+0

好吧,我的示例實現不是最好的,因爲'byteArray(0xca,0xfe,0xba,0xbe)'不會編譯。 – Chriss

回答

0

如果要指定字節變量或byte[]類型的字段,可以更緊湊超過new byte[]{1, 2, 3, 4}這樣寫:

byte[] bytes = {1, 2, 3, 4}; 

而且,與0xca, 0xfe, 0xba, 0xbe的問題是,所有這些值都實際上超出了Java byte的合法範圍,因爲默認情況下,Java中的byte,簽名爲

也許你想這需要long...類型的參數,並返回一個byte[],使用UnsignedBytes.checkedCastUnsignedBytes.saturatedCast每個值轉換的方法。

+0

'UnsignedBytes.checkedCast(long value)'會訣竅!可悲的番石榴缺乏這樣的功能... – Chriss

+0

@Chriss:番石榴有'UnsignedBytes.checkedCast(long value)'。你的意思是它沒有用於轉換數組的版本?這是真的,但你自己寫一個很容易。你也可以提出一個功能要求,但我不確定這是否被認爲是足夠普遍的要求。 – ColinD

+0

對,我想說的是:可悲的是沒有'UnsignedBytes.checkedCast(int ... v):byte []'。如果我的要求對番石榴足夠普遍,我也不確定。我想我開始在我的個人_uncommon_-Lib中實現它。感謝您的幫助@ColinD – Chriss

6

沒有爲沒有的功能,因爲

new byte[]{1,2,3,4,5} 

也很短。

編輯: 請注意,這類

static byte[] toBytes(byte ... bytes) 
{ 
    return bytes; 
} 

任何輔助方法,有同樣的問題new byte{...}:所有參數都必須真正字節,並不會傳播到int。因此,像0xca參數必須強制轉換爲byte在兩種情況下:

byte ba1[] = new byte[]{ (byte)0xca }; 
byte ba2[] = toBytes((byte)0xca); 

如果你想更容易輸入,那麼你必須寫一個分配的字節數組的自定義方法,並用手做了應對和鑄造。

+0

「0xca,0xfe,0xba,0xbe」呢?它將變得更長 '新字節[] {(字節)0xca,(字節)0xfe,(字節)0xba,(字節)0xbe} – Chriss

+0

更新回答您的評論。 –