package org.limewire.net.address; import java.io.IOException; import org.limewire.io.Address; import com.google.inject.Inject; /** * Used to (de)serialize <code>Addresses</code> over a network connection. */ public interface AddressSerializer { /** * Register this <code>AddressSerializer</code> with an * <code>AddressFactory</code>. */ @Inject public void register(AddressFactory factory); /** * @return a non-null String representing a human readable short * description of the kind of Address this serializer handles. */ public String getAddressType(); /** * @return true if this serializer can serialize <code>address</code>, * false otherwise */ public boolean canSerialize(Address address); /** * Deserialize a byte [] representation of an Address, typically as * read from a network message, into an Address. * @return a non-null Address * @throws IOException if the input cannot be deserialized into * an Address */ public Address deserialize(byte [] serializedAddress) throws IOException; /** * Serialize an Address into a byte [], typically to include in a * network message. * @param address a non-null address * @return a non-null byte [] * @throws IOException if an error occurs serializing the * Address */ public byte [] serialize(Address address) throws IOException; /** * Turns a user-input String into an Address. * @return an address representing the String parameter; never null * @throws IOException if the input cannot be converted into an Address */ Address deserialize(String address) throws IOException; }