code: private void readObject(ObjectInputStream s)
          throws IOException, ClassNotFoundException {
          scope_ifname = null;
          scope_ifname_set = false;
  
          if (getClass().getClassLoader() != Class.class.getClassLoader()) {
              throw new SecurityException ("invalid address type");
          }
  
          s.defaultReadObject();
  
          if (ifname != null && !"".equals (ifname)) {
              try {
                  scope_ifname = NetworkInterface.getByName(ifname);
                  if (scope_ifname == null) {
                      /* the interface does not exist on this system, so we clear
                       * the scope information completely */
                      scope_id_set = false;
                      scope_ifname_set = false;
                      scope_id = 0;
                  } else {
                      try {
                          scope_id = deriveNumericScope (scope_ifname);
                      } catch (UnknownHostException e) {
                          // typically should not happen, but it may be that
                          // the machine being used for deserialization has
                          // the same interface name but without IPv6 configured.
                      }
                  }
              } catch (SocketException e) {}
  
          }
          /* if ifname was not supplied, then the numeric info is used */
  
          ipaddress = ipaddress.clone();
  
          // Check that our invariants are satisfied
          if (ipaddress.length != INADDRSZ) {
              throw new InvalidObjectException("invalid address length: "+
                                               ipaddress.length);
          }
  
          if (holder().getFamily() != AF_INET6) {
              throw new InvalidObjectException("invalid address family type");
          }
      }
docs: restore the state of this object from stream
  including the scope information, only if the
  scoped interface name is valid on this system