-1

我必须在我的 Android 应用程序中填写一个字节 []。有时,这个大于 4KB。我像这样初始化我的 byte[] :

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

在这里,我的大小 = 22625。但是当我像这样填写我的字节 [] 时:

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

但是当我打印我的 byte[] 的内容时,我有一个 size = 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来自哪里。

这里有两个选项:

  1. ReadTools.getPacketSize()返回4096
  2. 您无意中重新分配myByteArray给另一个数组

你真的应该发布你的完整代码并告诉你使用什么库。很可能,它会有一个类似的方法

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

如果您只需要批量读取内存中的输入内容,这将为您节省一些输入并提供更好的性能

于 2012-05-29T13:16:10.730 回答