现在我有几个相同的方法,如:
default Byte readByte(InputStream stream){ ByteBuffer bytes = ByteBuffer.allocate(Byte.BYTES); bytes.order(ByteOrder.nativeOrder()); …
Java中的泛型是编译时,因此您无法使用它们来解决您的问题。我建议手动声明方法( getByte() , getShort() 等,但在内部使用一些“通用”实现,如下例所示:
getByte()
getShort()
public Byte readByte(InputStream is) { return read(is, Byte.BYTES, ByteBuffer::get); } public Short readShort(InputStream is) { return read(is, Short.BYTES, ByteBuffer::getShort); } // And other methods... private <T extends Number> T read(InputStream is, int length, Function<ByteBuffer, T> getter) { ByteBuffer bytes = ByteBuffer.allocate(length); bytes.order(ByteOrder.nativeOrder()); while (0 != bytes.remaining()) { try { bytes.put((byte)is.read()); } catch (Exception e) { e.getStackTrace(); } } bytes.rewind(); return getter.apply(bytes); }
除此之外,我还会提到它看起来像你试图重新实现 DataInputStream类 。这是一个 InputStream 已经拥有你需要的所有方法的包装器( readByte() , readShort() 等)。
InputStream
readByte()
readShort()