当前位置: 首页 > 面试题库 >

Java字节数组包含负数

霍财
2023-03-14
问题内容

我正在将文件读取成块的字节数组,然后通过POST请求通过网络将其发送到Web服务器。没什么复杂的,在使用完全相同的代码之前,我已经完成了。这次,我注意到我的图像到达服务器时看起来真的很奇怪,所以我决定查看发送的字节数组和接收的字节数组,以确保它是相同的。不是。在Java发送端,字节数组包含负数。在C#接收端,没有负数。

接收方的前15个字节(C#)

137
80
78
71
13
10
26
10
0
0
0
13
73
72
68

那些相同的字节,但是在发送端(java)

-119
80
78
71
13
10
26
10
0
0
0
13
73
72
68

所有非负数都相同,并且-119并不是唯一的负数,它们都结束了。我确实注意到-119和137相距256,并想知道这是否与它有关。

我用来读取图像的代码(java)

public static byte[] readPart(String fileName, long offset, int length) throws FileNotFoundException, Exception
{
    byte[] data = new byte[length];
    File file = new File(fileName);
    InputStream is = new FileInputStream(file);
    is.skip(offset);
    is.read(data,0,data.length);
    is.close();
    return data;
}

我用来写数据的代码(C#)

    private void writeFile(string fileName, Stream contents)
    {
        using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
        {
            int bufferLen = 65000;
            byte[] buffer = new byte[bufferLen];
            int count = 0;
            while ((count = contents.Read(buffer, 0, bufferLen)) > 0)
            {
                fs.Write(buffer, 0, count);
            }
            fs.Close();
        }
        contents.Close();
    }

我不知道这是否总是会发生,而我只是从来没有注意到过,还是决定严重出错。我所知道的是,此代码以前可以用于非常相似的功能,并且现在无法正常工作。

如果有人有任何建议或解释,我将不胜感激。

编辑:我的图像看起来很奇怪的原因是我如何调用readPart方法。

byte[] data = FileUtilities.readPart(fileName,counter,maxFileSize);//counter is the current chunk number

我应该怎么称呼它

byte[] data = FileUtilities.readPart(fileName,counter*maxFileSize,maxFileSize);//the current chunk * cuhnksize for the offset...

谢谢大家,我现在已经大大减少了困惑:)


问题答案:

Java没有无符号字节。所有字节均视为已签名。就这样。

真正重要的是您如何 看待 字节,因为您很少真正需要对字节进行比较。唯一的不同是,正如您所发现的那样,它们按签名打印。

如果愿意,可以使用Guava的UnsignedBytes实用程序将Java字节视为未签名,但是实际上并没有太大的区别。



 类似资料:
  • 问题内容: 我正在用Java解析具有以下规范的字节数组: 今天,我没有看到任何解决方案来解析此数组以获取具有正确类型的7变量。您是否确认或者我是否缺少Java中的魔术函数之类的东西,该函数允许在字节数组中查找字符串“限制”(我看不出如何将Minimum value与相关的ASCII字符区分开)。 两个字符串之间是否有关于特殊字符的“约定”? 问题答案: 好吧,您知道名字从字节9开始,姓氏在字节结尾

  • 问题内容: 我有一个字节数组,其中包含我希望转换为字符串的ASCII字符。例如: myByteArray在循环后应包含字符串“ 12345678”。如何将此字符串转换为String变量? 谢谢! 问题答案: 用 字符串类为此提供了一个构造函数。 旁注:此处的第二个参数是CharSet(字节编码),应谨慎处理。这里更多。

  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 问题内容: 我有一个JTextArea,它只需要接受数字。这是我的代码: 对正数有效,但对负数无效。我该如何解决? 编辑:抱歉,在Internet上找到了AxisJTextFilter,而我忘记了这一点。它的代码是: 问题答案: 尝试修改正则表达式(int验证方法containsOnlyNumbers)。 这将接受以下数字: 1234 -1234 +1234 1234.1234 希望对您有所帮助

  • 问题内容: 我得到一个整数: 当我使用方法: 给出: 但我想要一个字节数组: 我该怎么做? 问题答案: 使用Java NIO的ByteBuffer非常简单: 输出:

  • 问题内容: 我的任务是用Java编写哈希表,该哈希表必须适用于任何数据类型。我正在编写的代码规则如下:-哈希表必须具有一个数组作为基础数据结构,其大小在构造对象时确定- 发生冲突时,应该放置碰撞的元素链接列表,该列表包含哈希表中该索引(键)处的所有元素 因此,对于基础数据类型,我做了一个LinkedList类型的数组(自定义,不是Java API LinkedList)。 当然,问题是实例化此数组