-1

Android アプリケーションで byte[] を入力する必要があります。場合によっては、これが 4KB を超えることがあります。次のように byte[] を初期化します。

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

ここでは、私のサイズ = 22625 です。しかし、次のように byte[] を埋めると:

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

しかし、byte[] のコンテンツを印刷すると、サイズ = 4060 の byte[] があります。これが 4060 より大きい場合、Java は byte[] を分割しますか? はいの場合、 byte[] を 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();
            }
          }
...
}
4

1 に答える 1

1

Java は何も分割しません。エラーを再現する最小限のコードを投稿し、どこReadToolsから来たのかを伝える必要があります。

ここには 2 つのオプションがあります。

  1. ReadTools.getPacketSize()戻り値4096
  2. うっかりmyByteArrayして別のアレイに再割り当てした

完全なコードを実際に投稿し、使用するライブラリを通知する必要があります。おそらく、次のようなメソッドがあります

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

これにより、タイピングが節約され、メモリ内の入力の内容を一括で読み取るだけでよい場合は、パフォーマンスが向上します。

于 2012-05-29T13:16:10.730 に答える