跳过字节Java NIO SocketChannel

时间:2016-10-18 13:24:23

标签: java sockets nio

假设我有SocketChannel正在等待读取。 我不想读取前K个字节(因为,我不想将它们复制到字节缓冲区,只是跳过它们)。

有没有这样做?没有skip()方法可用。

1 个答案:

答案 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,为什么你说你必须分配一个缓冲区?最后的目标是什么?

编辑2

有一个不需要分配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()));