【问题标题】:cast an object to byteArray将对象强制转换为 byteArray
【发布时间】:2012-05-30 15:35:46
【问题描述】:

我有一个功能

   public static Object receviceSigAndData (Socket s) {
       byte[] data = null;
       try {
            DataInputStream din2 = new DataInputStream(s.getInputStream());
            int sig_len = 0;
            sig_len = din2.readInt();
            byte[] sig = new byte[sig_len];
            din2.readFully(sig);
            int data_len = 0;
            data_len = din2.readInt();
            data = new byte[data_len];     
            dsa.update(data);


       } catch (IOException ioe) {
                ioe.printStackTrace();
       } catch (Exception e) {
                e.printStackTrace();
       }

       return (Object)data;
   }

函数返回一个对象,如果对象是字节数组,如何将对象转换为byte[]?

byte[] b = (?)receviceSigAndData (socket);

谢谢

【问题讨论】:

  • 为什么不直接从方法中返回一个byte[]?似乎您不必要地将其转换为 Object。

标签: java


【解决方案1】:

通过查看您的代码:

  • 您不必将返回值向上转换为 Object:因为它是向上转换,所以它已隐式完成(byte[] 静态也是 Object)
  • 您可以使用特定的向下转换轻松地将Object 转换为byte[]:byte[] a = (byte[])obj
  • 像你这样返回Object 的方法是完全没有意义的,签名是为了有用和提供信息。返回Object 是您能做的信息最少的事情。如果您的方法旨在返回 byte[],则其返回值应为 byte[] 类型

【讨论】:

    【解决方案2】:

    这里有 2 个帮助方法可让您将字节数组序列化和反序列化为对象。

    public static Object deserializeBytes(byte[] bytes) throws IOException, ClassNotFoundException
    {
        ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bytesIn);
        Object obj = ois.readObject();
        ois.close();
        return obj;
    }
    
    
    public static byte[] serializeObject(Object obj) throws IOException
    {
        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bytesOut);
        oos.writeObject(obj);
        oos.flush();
        byte[] bytes = bytesOut.toByteArray();
        bytesOut.close();
        oos.close();
        return bytes;
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 2011-01-01
    • 2012-05-31
    • 1970-01-01
    • 2023-03-29
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多