将对象强制转换为byteArray

hkg*_*ile 3 java

我有一个功能

   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;
   }
Run Code Online (Sandbox Code Playgroud)

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

byte[] b = (?)receviceSigAndData (socket);
Run Code Online (Sandbox Code Playgroud)

谢谢

Jac*_*ack 8

通过查看您的代码:

  • 你不要把返回值upcast到Object:因为它是一个upcast,它是隐式完成的(一个byte[]静态也是一个Object)
  • 您可以使用特定的向下转换轻松地转换Object为a byte[]:byte[] a = (byte[])obj
  • 像你这样的方法返回一个Object完全没有意义的方法,签名意味着有用和信息丰富.返回一个Object是你可以做的信息最少的事情.如果您的方法是返回a,byte[]那么它的返回值应该是byte[]类型


geo*_*e_h 5

下面是两个辅助方法,可以将字节数组序列化和反序列化为对象.

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;
}
Run Code Online (Sandbox Code Playgroud)