2014-01-05 71 views
2

我對Java只有幾個小時的使用經驗。Java檢查數組是否已滿,將不同陣列的一部分複製到另一個陣列中

我想在for循環中的一個字節數組中存儲一些信息。不過,我需要知道它什麼時候已滿。如果它已滿,我會將字節數組的內容寫入輸出文件並繼續。我怎麼能知道?

這裏是我的代碼:(數字只是一個例子,在我真正的代碼,他們是從一些計算來)

byte[] wholeBlock =new byte[1024]; 
byte[] checkStorage= new byte[1000]; 
byte[] outputStore= new byte[60]; // when this is full I need to write it into file and erase content. 

for(int i=0;i<256;i++){ 
    if(wholeBlock[i]==checkStorage[i]){ 
     // check if outputStore is full or not enough to store some number of bytes 
     // if there is enough space   
      // now I want to store 3 bytes starting from i'th member of checkStorage into  outputStore. I also want to know how could I do that. 
     // otherwise 
      // write the content of outputStore into file 
    } 
} 
+0

@ᴍarounᴍaroun對不起。我編輯了它 – TheGost

+0

@ᴍarounᴍaroun哦,是的,你是對的!我刪除了我的評論。 –

+1

現在我們可以專注於我真正的問題嗎? – TheGost

回答

3

要知道一個數組如何「滿」,youl'll需要有一個「INT計數器」或類似的東西
,增加它每次你添加了一些數組

+0

沒有辦法呢? – TheGost

+0

不!沒有方法。 @TheGost也考慮ByteBuffer類 – venergiac

+1

從技術上講,陣列一直都是滿的。無論您如何看待,分配「新字節[10]」的數組都有10個字節。每個字節都有一個值。真正的問題是,哪些字節具有來自作業的值,哪些不是? – deviantfan

0

我的建議:ByteBuffer的類NIO包的

http://docs.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html

此處作爲一例

byte[] myByte = {1,1,1,1,1}; //5bytes 
    ByteBuffer buffer = ByteBuffer.allocate(256); 
    buffer.put(myByte); 

    System.out.println(buffer.capacity()); // it return 256 

    System.out.println(buffer.position()); // it return 5 

    buffer.put(myByte); 
    System.out.println(buffer.position()); // it return 10 

    System.out.println(buffer.remaining()); // it return 256 - 10 

    buffer.rewind(); 
    System.out.println(buffer.position()); // it return 0 
2

想像這樣的盒一個行陣列,每個保持所定義的類型的東西。

如果你問一個數組outputStore = new byte[60]你得到的60盒一排,各持byte類型(這是0b)的默認值。

與陣列的問題是,對於程序它是總是充滿。它始終有所有的框填充一個字節,並且不能告訴你哪些框由默認填充,哪些填充了

您有有責任定義和存儲該信息。而你通過維護int類型的計數器或索引變量(或long,如果int不夠大)來實現這一點。

作爲初學者,您可能想要堅持使用數組來深入理解Java原理。對於這一點,你應該寫出類似於下面的代碼:

byte[] wholeBlock =new byte[1024]; 
byte[] checkStorage= new byte[1000]; 
byte[] outputStore= new byte[60]; // when this is full I need to write it into file and erase content. 
int outputStoreIndex = 0; 

for(int i=0;i<256;i++){ //do you mean to use wholeBlock.length or checkStorage.length? 
    if(wholeBlock[i]==checkStorage[i]){ 
     // check if outputStore is full or not enough to store some number of bytes 
     // if there is enough space   
     if (outputStoreIndex < (outputStore.length-2)) { //the 2 accommodates i+2 below 
      // now I want to store 3 bytes starting from i'th member of checkStorage into  outputStore 
      outputStore[outputStoreIndex] = checkStorage[i]; 
      outputStore[outputStoreIndex+1] = checkStorage[i+1]; 
      outputStore[outputStoreIndex+2] = checkStorage[i+2]; 
      outputStoreIndex += 3; 
     // otherwise 
     } else { 
      // write the content of outputStore into file 
      /* here you can write the bytes */ 
      //remember to write bytes from outputStore only up to (outputStoreIndex-1) 
      //to "erase" outputStore, simply reset the index to 0: 
      outputStoreIndex = 0; 
     } 
    } 
} 

當你在的Java變得更好,探索到由其他如ArrayListByteBuffer提到的選項。這極大地幫助您減少調試應用程序的時間,因爲它們可以幫助您自動執行手動執行的操作。

相關問題