Java不支持未签名的解决方法

吉尔伯特·威廉姆斯(Gilbert Williams)

我有一个类,有一个名为的变量buffer,其中包含一个字节数组。我有一个称为的方法readShort该方法从缓冲区读取两个字节并将其返回为short。但是,有时它返回负值,我不知道为什么。

这是我的课:

public class InPacket {

    private int index;
    private byte[] buffer;

    public InPacket(byte[] data) {
        this.index = 0;
        this.buffer = data;
    }

    public int getLength() {
        return buffer.length;
    }

    public int getAvailable() {
        return buffer.length - index;
    }

    public int getPosition()
    {
        return index;
    }

    public  void setPosition(int value) throws Exception {
        if (value < 0 || value > buffer.length) {
            throw new Exception("Value out of range.");
        }

        this.index = value;
    }

    private void checkLength(int length) {
        if (index + length > buffer.length || length < 0) {
            //throw new Exception("Length out of range.");
        }
    }

    public boolean readBoolean() {
        checkLength(1);
        return buffer[index++] != 0;
    }

    public byte readByte()
    {
        checkLength(1);
        return buffer[index++];
    }

    public byte[] readBytes(int count)
    {
        checkLength(count);
        byte[] temp = new byte[count];

        System.arraycopy(buffer, index, temp, 0, count);

        index += count;
        return temp;
    }

    public short readShort()
    {
        checkLength(2);

        int v1 = buffer[index++];
        v1 |= buffer[index++] << 8;

        return (short)v1;
    }

    public int readInt()
    {
        checkLength(4);

        int v1 = buffer[index++];
        v1 |= buffer[index++] << 8;
        v1 |= buffer[index++] << 16;
        v1 |= buffer[index++] << 24;
        return v1;
    }

    public long readLong()
    {
        checkLength(8);

        long v1 = buffer[index++];
        v1 |= buffer[index++] << 8;
        v1 |= buffer[index++] << 16;
        v1 |= buffer[index++] << 24;
        v1 |= buffer[index++] << 32;
        v1 |= buffer[index++] << 40;
        v1 |= buffer[index++] << 48;
        v1 |= buffer[index++] << 56;

        return v1;
    }

    public String readString() {
        short count = readShort();

        return readString(count);
    }

    public String readString(int count)
    {
        checkLength(count);

        char[] fin = new char[count];

        for (int i = 0; i < count; i++)
        {
            fin[i] = (char)readByte();
        }

        return new String(fin);
    }

    public Point readPoint() {
        return new Point(readShort(), readShort());
    }

    public byte[] readRemainingBytes() {
        return readBytes(getAvailable());
    }

    public void skip(int count)
    {
        checkLength(count);
        index += count;
    }

    public byte[] toArray() {
        byte[] fin = new byte[buffer.length];

        System.arraycopy(buffer, 0, fin, 0, buffer.length);

        return fin;
    }

    @Override
    public String toString() {
        String ret = "";

        for (int i = 0; i < buffer.length; i++) {
            ret += String.format("%02X ", buffer[i]);
        }

        return ret;
    }
}

因此,它可以一直工作到读取较高值的某一点,然后将其返回负值。(-127而不是129)。为什么会发生这种情况,我该怎么做才能解决该问题?

斯蒂芬

这是我用来阅读短裤的方法:

public final int readUnsignedShort()
    throws IOException
{
    int ch1 = m_byteArray[m_nCounter++];
    int ch2 = m_byteArray[m_nCounter++];

    if ( ch1 < 0 )
    {
        ch1 = ch1 + 256;
    }
    if ( ch2 < 0 )
    {
        ch2 = ch2 + 256;
    }
    return ((ch2 << 8) & 0xFF00) + (ch1 & 0x00FF);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFX Webview不支持window.FileReader javascript的解决方法

来自分类Dev

不支持Protobuf-NET IExtensible继承的解决方法

来自分类Dev

有关BETWEEN的不支持的日期格式的解决方法?

来自分类Dev

JavaFX Webview不支持window.FileReader javascript的解决方法

来自分类Dev

访问不支持IPv6的网站有什么解决方法?

来自分类Dev

解决方法“服务器不支持该控件。该控件很重要。” Active Directory错误

来自分类Dev

pip install psutil抛出错误:不支持的体系结构。任何解决方法?

来自分类Dev

在Thymeleaf中签名和不支持

来自分类Dev

如何在IE11中解决:对象不支持属性或方法'padStart'

来自分类Dev

需要解决:“抱歉,发生错误的对象不支持此属性或方法”

来自分类Dev

我无法解决java.lang.UnsupportedOperationException:尚不支持

来自分类Dev

如何解决Maven的不支持的类文件的主要版本57的Java 13和Spring

来自分类Dev

我无法解决java.lang.UnsupportedOperationException:尚不支持

来自分类Dev

对象不支持此属性或方法

来自分类Dev

RavenDB:不支持的方法:全部

来自分类Dev

对象不支持属性或方法“填充”

来自分类Dev

请求方法“ HEAD”不支持

来自分类Dev

对象不支持属性或方法“删除”

来自分类Dev

方法''不支持SQL转换

来自分类Dev

不支持Oracle重载方法

来自分类Dev

不支持的方法:GradleProject.getBuildScript()

来自分类Dev

Web API不支持POST方法

来自分类Dev

春季:请求方法'POST'不支持

来自分类Dev

对象不支持属性或方法“ kendoDatePicker”

来自分类Dev

HttpRequestMethodNotSupportedException:不支持请求方法“ POST”

来自分类Dev

对象不支持“最近”的属性或方法

来自分类Dev

此路线不支持POST方法

来自分类Dev

反应不支持地图方法

来自分类Dev

错误:请求方法'GET'不支持

Related 相关文章

  1. 1

    JavaFX Webview不支持window.FileReader javascript的解决方法

  2. 2

    不支持Protobuf-NET IExtensible继承的解决方法

  3. 3

    有关BETWEEN的不支持的日期格式的解决方法?

  4. 4

    JavaFX Webview不支持window.FileReader javascript的解决方法

  5. 5

    访问不支持IPv6的网站有什么解决方法?

  6. 6

    解决方法“服务器不支持该控件。该控件很重要。” Active Directory错误

  7. 7

    pip install psutil抛出错误:不支持的体系结构。任何解决方法?

  8. 8

    在Thymeleaf中签名和不支持

  9. 9

    如何在IE11中解决:对象不支持属性或方法'padStart'

  10. 10

    需要解决:“抱歉,发生错误的对象不支持此属性或方法”

  11. 11

    我无法解决java.lang.UnsupportedOperationException:尚不支持

  12. 12

    如何解决Maven的不支持的类文件的主要版本57的Java 13和Spring

  13. 13

    我无法解决java.lang.UnsupportedOperationException:尚不支持

  14. 14

    对象不支持此属性或方法

  15. 15

    RavenDB:不支持的方法:全部

  16. 16

    对象不支持属性或方法“填充”

  17. 17

    请求方法“ HEAD”不支持

  18. 18

    对象不支持属性或方法“删除”

  19. 19

    方法''不支持SQL转换

  20. 20

    不支持Oracle重载方法

  21. 21

    不支持的方法:GradleProject.getBuildScript()

  22. 22

    Web API不支持POST方法

  23. 23

    春季:请求方法'POST'不支持

  24. 24

    对象不支持属性或方法“ kendoDatePicker”

  25. 25

    HttpRequestMethodNotSupportedException:不支持请求方法“ POST”

  26. 26

    对象不支持“最近”的属性或方法

  27. 27

    此路线不支持POST方法

  28. 28

    反应不支持地图方法

  29. 29

    错误:请求方法'GET'不支持

热门标签

归档