缓冲短I / O.

时间:2012-12-03 17:16:02

标签: java buffer java-io short

如何在短缓冲区中读/写?

我正在尝试为短值实现BufferedReader和Writer。每次都会传递一个短[],并且会读短[]。

但是java API没有这个接口,只有byte []。

实现此功能的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

您可以使用长度为2的ByteBuffer读取/写入字节并将两组转换为短路:

ByteBuffer put() to put the bytes into or putShort() when going the other way.   
ByteBuffer.getShort() to convert back into shorts.

答案 1 :(得分:1)

那么,对于你的BufferedInputStream(不是读者),你可以尝试同时读取2个字节:

public synchronized int read(short[] s, int off, int len) throws IOException {
    byte[] b = new byte[s.length * 2];
    int read = read(b, off * 2, len * 2);
    for (int i = 0; i < read; i+=2) {
        int b1 = b[i];
        int b2 = b[i+1];
        s[i/2] = (short) ((b1 << 8) | b2);
    }
    return read / 2;
}

对于BufferedOutputStream(非编写器),您可以尝试相反的操作来同时写入2个字节。

答案 2 :(得分:0)

您可以实现Reader interface,然后扩展writer class以实现除short []之外的编写器。

答案 3 :(得分:0)

只需将一个DataOutputStream包装在BufferedOutputStream周围,并实现一个方法writeShortArray(short []),它在数组参数上迭代地调用writeShort()。同样适用于输入。