假设我有SocketChannel正在等待读取。 我不想读取前K个字节(因为,我不想将它们复制到字节缓冲区,只是跳过它们)。
有没有这样做?没有skip()方法可用。
答案 0 :(得分:2)
我不确定这是否是您想要实现的目标,或者即使它可以按您的意愿运行,但您可以从中获得Socket
然后InputStream
。
由于您希望跳过字节,因此使用I / O流似乎是最佳解决方案。
SocketChannel sock = SocketChannel.open();
sock.connect(new InetSocketAddress("your addres or something", 80));
InputStream ins = sock.socket().getInputStream();
//Skip here
ins.skip(5);
不,您无法重复使用输入流所消耗的内容。
顺便说一句,你能更精确地使用"分配"问题?你可以管道InputStream,为什么你说你必须分配一个缓冲区?最后的目标是什么?
有一个不需要分配K字节
的例子 ins.skip(1);
ArrayList<Byte> bts = new ArrayList<>();
int last = 0;
while (last != -1) {
last = in.read();
bts.add((byte)last);
}
System.out.println(bts.stream().map(b -> new String(new byte[]{b.byteValue()})).collect(Collectors.joining()));