gpt4 book ai didi

回调中的 Java 数组数据损坏

转载 作者:行者123 更新时间:2023-12-02 09:21:12 24 4
gpt4 key购买 nike

这段代码给我带来了一些问题。这只是服务的线程部分,用于接收通过 TCP 连接发送的数据。此数据是通过回调提供给 Activity 的图像(160x120x16bpp = 38400 字节)。

public void run() {
InetAddress serverAddr;
link_respawn = 0;

try {
serverAddr = InetAddress.getByName(VIDEO_SERVER_ADDR);
} catch (UnknownHostException e) {
Log.e(getClass().getName(), e.getMessage());
e.printStackTrace();
return;
}

Socket socket = null;
DataInputStream stream;

do {
bad_frames = 0;
frames = 0;
status = FrameDecodingStatus.Idle;

try {
socket = new Socket(serverAddr, VIDEO_SERVER_PORT);

stream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

final byte[] _data = new byte[PACKET_SIZE];
final byte[] _image_data = new byte[IMAGE_SIZE];
int _data_index = 0;

while (keepRunning) {
if (stream.read(_data, 0, _data.length) == 0)
continue;

for (byte _byte : _data) {
if (status == FrameDecodingStatus.Idle) {
if (_byte == SoF) {
status = FrameDecodingStatus.Data;
_data_index = 0;
}
} else if ((status == FrameDecodingStatus.Data) && (_data_index < IMAGE_SIZE)) {
_image_data[_data_index] = _byte;
_data_index++;
} else if ((status == FrameDecodingStatus.Data) && (_data_index == IMAGE_SIZE)) {
if (_byte == EoF) {
if(frameReadyCallBack!=null)
frameReadyCallBack.frameReady(_image_data);
frames++;
status = FrameDecodingStatus.Idle;
}
}
}
}

link_respawn++;
Thread.sleep(VIDEO_SERVER_RESPAWN);
Log.d(getClass().getName(), "Link respawn: " + link_respawn);
} catch (Throwable e) {
Log.e(getClass().getName(), e.getMessage());
e.printStackTrace();
}
} while (keepRunning);

if (socket != null) {
try {
socket.close();
} catch (Throwable e) {
Log.e(getClass().getName(), e.getMessage());
e.printStackTrace();
}
}
}

接收回调的Android Activity以一种非常奇怪的方式在数组损坏中找到数据..即从某个索引数据开始into 数组设置为 0。我怎样才能避免这种情况?

最佳答案

read 不是 readFully。三参数 read 返回已读取的字节数,这不一定是所提供数组的完整长度。

此代码删除read返回值并处理整个数组。

            if (stream.read(_data, 0, _data.length) == 0)
continue;

for (byte _byte : _data) {

关于回调中的 Java 数组数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58685046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com