【问题标题】:Trimming empty elements off end of byte array - Java修剪字节数组末尾的空元素 - Java
【发布时间】:2015-04-19 21:45:36
【问题描述】:

我正在使用 UDP 进行一些网络编程,并试图将一个大数据包分解为许多较小的数据包,然后通过网络发送它们。在发送最后一个数据包之前,一切都很好。最后一个数据包的问题在于,关联的 byte[] 末尾有一些尾随空间,因为 byte[] 始终为 1024 字节,但循环仅在仍有文件数据要发送时填充数组。在将数组放入要通过网络发送的 DatagramPacket 之前删除 byte[] 的空元素的最佳方法是什么?

    while(count < fileData.length) {
            for(int i=0; i<smallBuffSize; i++){
                System.out.println(count);
                System.out.println(fileData.length);
                if(count < fileData.length){
                    data[i] = fileData[count];
                    count++;
                }
            }

            DatagramPacket dataPacket = new DatagramPacket(data, data.length, serverAddress, 5000); 
            socket2.send(dataPacket);
        }

【问题讨论】:

  • 你的意思是Arrays.copyOf(bytes, length) 吗?
  • 好吧,我不知道有这样的东西,但效果很好。谢谢。

标签: java arrays trim


【解决方案1】:

当没有这么多数据时,不要使用data.length 作为长度,我建议只提供实际长度。这样就不会在最后对数据进行任何填充。

【讨论】:

  • 这只是基本结构的一个简单案例。通常会有更多,并且取决于他们上传的文件。
  • @Xerunix 在这种情况下,我建议你使用一个变量来确定长度。
  • 哦,抱歉没有意识到您是在主帖上留下评论的同一个人。是的,这正是我最终做的。然后我使用该变量来确定要制作的副本有多大。非常感谢!
  • @Xerunix 在发送端,你不需要复制,当你创建DatagramPacket时,你只需要说你想使用多少字节[]。
  • 好点。我相应地调整了代码。 DatagramPacket dataPacket = new DatagramPacket(data, dataLength, serverAddress, 5000);出于某种原因,它仍然只适用于文本文件,所以我会继续调试,但我感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2013-09-11
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多