繁体   English   中英

通过HTTP请求将Java对象作为字节发送:BASE64是否必要?

[英]Sending java objects as bytes over a http request: is BASE64 necessary?

我有一个可序列化的Java对象。 我需要让另一个Java Webapp对该对象进行操作。 我目前正在使用此设置来传输对象:

  1. 使用一个ByteArrayOutputStream baos
  2. 将包放在ObjectOutputStream oos
  3. 使用写对象oos ,并获得byte[]baos
  4. 使用Base64编码器将byte []编码为另一个byte []
  5. 使用httpurlconnection (POST方法)发送字节
  6. 在接收端,我向后执行第1步到第4步,以使我的物体恢复原状。

这可行! 但是,我不确定BASE64编码到底在做什么第四步。 我不能只在请求的正文中发送纯字节吗? 使用Base64编码/解码可以获得什么好处/安全措施?

这是我在另一个问题中发现的步骤1-4中描述的相关代码段。

 /** Read the object from Base64 string. */
   private static Object fromString( String s ) throws IOException, ClassNotFoundException {
        byte [] data = Base64.getDecoder().decode( s );
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(  data ) );
        Object o  = ois.readObject();
        ois.close();
        return o;
   }

    /** Write the object to a Base64 string. */
    private static String toString( Serializable o ) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream( baos );
        oos.writeObject( o );
        oos.close();
        return Base64.getEncoder().encodeToString(baos.toByteArray()); 
    }
}

Base64的目的是将字节数组转换为人类可读(且通用)格式。

因为基础流通过字节发送数据,并且没有丢失数据的风险(例如,打印到控制台的控制字符不可复制/粘贴),所以将字节转换为Base64毫无意义。 如果将网络协议更改为其他一些无法传输不可打印字符的问题,那么除了将来可能的兼容性之外,您没有任何好处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM