Используйте интерфейсы, если возможно. Reflections - очень медленно.
UPD: Пояснить трудно, потому что в общем случае через интерфейсы будет громоздко. Нужно исходить из специфики передаваемых данных.
Если вам не важен формат передачи (т.е. не нужно следовать какому-то протоколу), то просто используйте стандартную сериализацию
class MyData implements Serializable {
private int myValue;
// тут какой-то код....
}
class StoreStreamAction implements Runnable {
private final OutputStream os;
private final MyData toBeWritten;
// ....
public void run() {
try {
ObjectOutputStream objs = new ObjectOutputStream(os);
objs.writeObject(toBeWritten);
} catch(IOException e) {
//....
}
}
}
Если же вам обязательно следовать протоколу, то тут очень важно понять специфику передаваемых данных и особенности самого протокола. В противном случае, пример получается очень уж абстрактный
interface Trasferrable {
String getName();
void sendToStream(OutputStream os) throws IOException;
}
class MyData implements Transferrable {
private int myValue;
public String getName() {
return "[my-data]";
}
public void sendToStream(OutputStream os) throws IOException {
os.write(myvalue & 0xff);
os.write((myvalue >> 8) & 0xff);
// .. etc
}
}
class StoreStreamAction implements Runnable {
private final OutputStream os;
private final Transferrable toBeWritten;
// ....
public void run() {
try {
os.write(toBeWritten.getName().getBytes(Charset.forName("UTF-8")));
os.write(0);
toBeWritten.sendToStream(os);
} catch(IOException e) {
//....
}
}
}