Java 使用http发送二进制数据

Java 使用http发送二进制数据,java,http,post,Java,Http,Post,我需要发送一条分为两部分的二进制消息: 第一部分是4个字节,它包含一些信息(比如一个整数) 第二部分有一个XMLtext流 我从来没有做过这样的事,我怎么能这样做呢 我的代码是这样的: public String serverCall(String link, String data){ HttpURLConnection connection; OutputStreamWriter writer = null; URL url = nul

我需要发送一条分为两部分的二进制消息:

  • 第一部分是4个字节,它包含一些信息(比如一个整数)
  • 第二部分有一个XMLtext流
  • 我从来没有做过这样的事,我怎么能这样做呢

    我的代码是这样的:

    public String serverCall(String link, String data){
             HttpURLConnection connection;
             OutputStreamWriter writer = null;
    
             URL url = null;
             String parameters = data;
    
             try
             {
                 url = new URL(link);
                 connection = (HttpURLConnection) url.openConnection();
                 connection.setDoOutput(true);
                 connection.setRequestProperty("Content-Type", "text/xml");
                 connection.setRequestMethod("POST");    
    
                 writer = new OutputStreamWriter(connection.getOutputStream());
                 writer.write(parameters);
                 writer.flush();
                 writer.close();
              }
              catch(IOException e)
              {
                  e.printStackTrace();
              }
    }
    

    如何将XML设置为4个字节,以及如何在其前面包含4个字节的文本?

    如果消息的二进制部分仅为4个字节,请对其进行百分比编码并将其作为附加url参数发送。或者,将其添加到现有的xml流中

    java类和提供了必要的方法。

    (信息)HTTP协议使用方法PUT“在服务器上传输文件”(而不是POST)

    二进制数据的传输最好不是“text/…”内容类型,而是“application/bin”

    但是,您可以将XML作为“text/XML;charset=UTF-8”发送,并使用您自己的头

    connection.setHeader("MyCode",
        String.format("%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3]));
    
    如果以二进制形式发送所有数据,则不要使用写入程序(将字节转换为某些字符编码),而是使用流(BufferedOutputStream)。XML格式为:

    byte[] xmlBytes = xml.getBytes("UTF-8");
    
    如果
    中没有提到其他编码,则为UTF-8


    close()
    已刷新,因此不需要
    flush()

    请将标题中的“binnay”更改为“binary”,听起来您可能需要一个多部分请求
    application/octet-stream
    将是一种更适合任意二进制数据的内容类型,不是吗?@Dev事实上,我个人使用它,我喜欢这个古老的名称;八位字节=字节。