2012-05-29 3 views
-1

Я должен заполнить байт [] в своем приложении для Android. Когда-то это больше, чем 4 КБ. я инициализировать мой байт [], как это:Ограничение размера байта [] Java android

int size = ReadTools.getPacketSize(ptr.dataInputStream); 
byte[] myByteArray = new byte[size]; 

Здесь мой размер = 22625. Но когда я заполняю мой байт [], как это:

while (i != size) { 
myByteArray[i] = ptr.dataInputStream.readByte(); 
i++; 
} 

Но когда я печатаю содержание мой байт [], у меня есть байт [] с размером = 4060. Разделяет ли Java мой байт [], если этот размер больше 4060? И если да, как я могу получить байт [] выше 4060?

Вот мой полный код:

public class ReadSocket extends Thread{ 
     DataInputStream inputStream; 
     BufferedReader reader; 
     GlobalContent ptr; 
     public ReadSocket(DataInputStream inputStream, GlobalContent ptr) 
     { 
      this.inputStream = inputStream; 
      this.ptr = ptr; 
     } 

     public void run() { 
      int i = 0; 
      int j = 0; 
      try { 
       ptr.StatusThreadReadSocket = 1; 
       while(ptr.dataInputStream.available() == 0) 
       { 
        if(ptr.StatusThreadReadSocket == 0) 
        { 
         ptr.dataInputStream.close(); 
         break; 
        } 
       } 

       if(ptr.StatusThreadReadSocket == 1) 
       { 
        int end = ReadTools.getPacketSize(ptr.dataInputStream); 
        byte[] buffer = new byte[end]; 
        while (i != end) { 
         buffer[j] = ptr.dataInputStream.readByte(); 
         i++; 
         j++; 
       } 
       ptr.StatusThreadReadSocket = 0; 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      } 
... 
} 
+0

Что такое «конец» переменной и какое значение оно содержит? – Ewald

+0

Извините. Это не «конец», а «размер». – Vte

+0

И вы распечатываете значение «размер» на консоли при отладке, чтобы убедиться, что это ожидаемый размер? Буфер, о котором идет речь, инициализируется, как показано в первом разделе кода, правильно? Я не знаком с ReadTools, поэтому эти вопросы. – Ewald

ответ

1

Java не расщепляется ничего. Вы должны опубликовать минимальный код, который воспроизводит вашу ошибку, и указать, откуда приходит ReadTools.

Есть два варианта здесь:

  1. ReadTools.getPacketSize() возвращает 4096
  2. Вы inadevertedly переназначить myByteArray в другой массив

Вы действительно должны опубликовать полный код и сказать, что библиотека используется. Скорее всего, это будет иметь метод, как

read(byte[] buffer, int offset, int length); 

который сэкономит вам немного печатать, а также дать более высокую производительность, если все, что вам нужно, это основная чтение содержимого ввода в память

+0

ReadTools.getPacketSize() возвращает 22625. myByteArray не переназначает другой массив. Я отправляю полный код прямо сейчас. – Vte