限制大小字节[]Java android

限制大小字节[]Java android,java,android,size,byte,limit,Java,Android,Size,Byte,Limit,我必须在我的Android应用程序中填充一个字节[]。有时,这个大于4KB。 我初始化字节[],如下所示: int size = ReadTools.getPacketSize(ptr.dataInputStream); byte[] myByteArray = new byte[size]; 这里,我的尺码是22625。但当我像这样填充字节[]时: while (i != size) { myByteArray[i] = ptr.dataInputStream.readByte(); i++

我必须在我的Android应用程序中填充一个字节[]。有时,这个大于4KB。 我初始化字节[],如下所示:

int size = ReadTools.getPacketSize(ptr.dataInputStream);
byte[] myByteArray = new byte[size];
这里,我的尺码是22625。但当我像这样填充字节[]时:

while (i != size) {
myByteArray[i] = ptr.dataInputStream.readByte();
i++;
}
但是当我打印字节[]的内容时,我有一个大小为4060的字节[]。 如果我的字节[]大于4060,Java会分割它吗?如果是,我怎么能有一个字节[]高于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();
            }
          }
...
}

Java不会分割任何东西。您应该发布复制错误的最小代码,并告知
ReadTools
的来源

这里有两个选项:

  • ReadTools.getPacketSize()
    返回
    4096
  • 您意外地将
    myByteArray
    重新分配给另一个数组
  • 您应该发布完整的代码,并告知您使用的库。很可能,它会有一个类似的方法

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

    如果您只需要在内存中大容量读取输入的内容,这将节省您的键入时间,并提供更好的性能

    什么是“end”变量及其包含的值?抱歉。它不是“结束”,而是“大小”值。当您调试时,您正在将“大小”值打印到控制台,以确保它是预期的大小?问题中的缓冲区是按照代码的第一部分所示进行初始化的,对吗?我不熟悉ReadTools,因此有这些问题。是的,我的“大小”值等于22625。糟糕的是,我在复制代码时犯了一个错误。这不是循环中的“缓冲区”值,而是“myByteArray”。写最好的问题符合您的兴趣。缺少的内容:1)一些上下文2)代码片段无法运行3)错误的详细描述,以及如何获取和测量它4)不需要的东西:
    inputStream
    reader
    j
    。猜测是修复bug最糟糕的方法,不管怎样,要么你改进了你的问题,要么唯一能说的就是
    getPacketSize
    returns
    4060
    (我假设您通过
    buffer.length
    读取此值,初始化后确实无法更改此值,并且您声明不重新分配ReferenceRadTools。getPacketSize()返回22625。myByteArray未重新分配到另一个数组。我现在正在发布完整的代码。