现在我有两个相同的方法,比如:
default Byte readByte(InputStream stream) {
ByteBuffer bytes = ByteBuffer.allocate(Byte.BYTES);
bytes.order(ByteOrder.nativeOrder());
while (0 != bytes.remaining()) {
try {
bytes.put((byte)stream.read());
}
catch (Exception e) {
e.getStackTrace();
}
}
bytes.rewind();
return bytes.get();
}
...
default Short readShort(InputStream stream) {
ByteBuffer bytes = ByteBuffer.allocate(Short.BYTES);
bytes.order(ByteOrder.nativeOrder());
while (0 != bytes.remaining()) {
try {
bytes.put((byte)stream.read());
}
catch (Exception e) {
e.getStackTrace();
}
}
bytes.rewind();
return bytes.getShort();
}
同样的整数,浮点,双精度,还有比我想的更通用的方法?
我的尝试,例如:
private T read(InputStream stream) {
ByteBuffer bytes = ByteBuffer.allocate(T.BYTES);
bytes.order(ByteOrder.nativeOrder());
while (0 != bytes.remaining()) {
bytes.put((byte)stream.read());
}
bytes.rewind();
switch (T.class) {
case Byte.TYPE: return bytes.get();
case Short.TYPE: return bytes.getShort();
case Integer.TYPE: return bytes.getInt();
case Long.TYPE: return bytes.getLong();
case Float.TYPE: return bytes.getFloat();
case Double.TYPE: return bytes.getDouble();
default:
throw new UnsupportedTypeException(T.class);
}
}
所以,但它并不像我想的那样有效,Java!= C++ + ok。那么有没有什么方法可以用普通的风格来做呢?