【问题标题】:converting bitmap to byte arrays and sending using sockets android将位图转换为字节数组并使用套接字发送
【发布时间】:2014-11-19 06:13:54
【问题描述】:

我正在尝试将我的相机在我的应用程序中拍摄的图像作为字节数组发送。我将位图转换为字节数组,然后转换为 Base64 字符串,然后将其编码为字节数组并发送。但是,当我尝试发送它时,我收到一个异常,即我的字符串太长而无法发送。

准备发送到套接字:

        if(currentChatPartner==null)
            return;
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
        msg.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream .toByteArray();
        String encoded = Base64.encodeToString(byteArray, 0);
        sendThroughSocketImage(encoded, clientSocket, currentChatPartner.getIP(), currentChatPartner.getPort());

通过套接字发送:

        byte[] decoded = null;
        decoded = encoded.getBytes();
        try 
        {
            socket.send(new DatagramPacket(decoded, decoded.length, ip, port));
        } catch (IOException e) 
        {
            System.err.println("\nUnable to send message");
            return false;
        }
        return true;

有时它可以工作,但大多数情况下它没有:(这是有原因的吗?有没有办法可以修复它或缩短要发送的字符串??

【问题讨论】:

    标签: java android arrays sockets bitmap


    【解决方案1】:

    通过使用 DatagramPacket,您发送的 UDP 消息的混合长度略短于 64kb。很容易收到长异常的消息。您应该使用 TCP 套接字发送数据。

    网上有很多例子,例如

    http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/

    关于您的 cmets,通过客户端套接字发送字节数组的示例

        InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
        socket = new Socket(serverAddr, SERVERPORT);
        int start=0;
        int len=decoded.length;
        OutputStream out = socket.getOutputStream(); 
        DataOutputStream dos = new DataOutputStream(out);
        dos.write(array, start, len);
    

    【讨论】:

    • 有没有办法压缩或缩短字符串?如果没有,是否仍然可以通过 TCP 将位图图像作为字节数组/字符串发送?
    • 压缩可以让你到达某个地方,但在我看来,对于 UDP 的大小限制是严格的,所以即使压缩你可能会在某一时刻收到太长的消息。我提供了一个用于发送字节数组的 sn-p,但请注意我刚刚输入了它,所以应该进行一些 if 检查和一些异常处理
    • 感谢sn-p的代码。我目前正在睡 2 小时,所以一旦我开始工作,我会尝试将其标记为答案。愚蠢的问题,但我仍然可以如上所述将字符串编码为 Base64 并发送 byte[] decoded = null;解码 = 编码.getBytes();用你给我的代码?这是一个很好的起点!谢谢!
    猜你喜欢
    • 2018-05-06
    • 2018-10-25
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多