亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

回調中的 Java 數組數據損壞

回調中的 Java 數組數據損壞

森欄 2024-01-25 22:03:09
這段代碼給我帶來了一些問題。這只是服務的線程部分,用于接收通過 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;                        }                    }                }            }接收回調的Android發現數組中的數據以一種非常奇怪的方式損壞..即從某個索引開始數組中的數據被 設置為0。我怎樣才能避免這種情況?Activity
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

read不是readFully。三參數read返回已讀取的字節數,這不一定是所提供數組的完整長度。


此代碼刪除read返回值并處理整個數組。


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

                continue;


            for (byte _byte : _data) {


查看完整回答
反對 回復 2024-01-25
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號