private void writeInetAddressHolderObject()

in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/socket/Inet4AddressSerializer.java [52:95]


    private void writeInetAddressHolderObject(Object obj, AbstractHessianOutput out)
            throws IOException {

        String replacedClName = "java.net.InetAddress$InetAddressHolder";

        int ref = out.writeObjectBegin(replacedClName);

        if (ref < -1) {
            out.writeString("hostName");
            out.writeObject(((InetAddress)obj).getHostName());
            out.writeString("address");

            byte[] addr = ((InetAddress) obj).getAddress();
            int address  = addr[3] & 0xFF;
            address |= ((addr[2] << 8) & 0xFF00);
            address |= ((addr[1] << 16) & 0xFF0000);
            address |= ((addr[0] << 24) & 0xFF000000);
            out.writeObject(address);

            out.writeString("family");
            out.writeInt(2);

            out.writeMapEnd();
        } else {
            if (ref == -1) {
                out.writeClassFieldLength(3);

                out.writeString("hostName");
                out.writeString("address");
                out.writeString("family");

                out.writeObjectBegin(replacedClName);
            }

            out.writeObject(((InetAddress)obj).getHostName());
            byte[] addr = ((InetAddress) obj).getAddress();
            int address  = addr[3] & 0xFF;
            address |= ((addr[2] << 8) & 0xFF00);
            address |= ((addr[1] << 16) & 0xFF0000);
            address |= ((addr[0] << 24) & 0xFF000000);
            out.writeObject(address);
            out.writeInt(1);
        }
    }