二进制文件读取问题

xin_zzq1 2011-03-30 11:24:26
我在读取是二进制的文件时读出来的数据和文件的不一样,不知道是什么原因

File file = new File(dir);
int size = (int) file.length();
byte[] buf = new byte[size];
fis = new FileInputStream(file);
//dis = new DataInputStream(fis);
while(fis.read(buf) != -1)
{
}
for(int i =0;i< 32;i ++)
{
Log.d("data"+i,""+buf[i]);
}

本来源文件的二进制数据是 1 128 0 51 170 99 42 20....
但读出来的数据是 1 -128 0 51 -86 99 42 20....为什么出现这种情况?有什么办法解决?
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoln1010 2011-05-11
  • 打赏
  • 举报
回复
以后找贴方便
儿大不由爷 2011-03-30
  • 打赏
  • 举报
回复
转成int显示
xin_zzq1 2011-03-30
  • 打赏
  • 举报
回复
原来JAVA的byte型的取值范围是-128 到127之间
xin_zzq1 2011-03-30
  • 打赏
  • 举报
回复
来个人帮忙啊·我是java新手啊·
leonhd 2011-03-30
  • 打赏
  • 举报
回复
这个数据是一致的嘛!

byte类型下128和-128的二进制表示是相同的,因为你用的byte类型是有符号的,所以128被解释为负数,如果用无符号类型,则解释为正数128

假定sbyte为有符号byte类型,值域为-128~127,ubyte为无符号byte类型,值域为0~255
sbyte的下半个值域-128~-1,与ubyte的上半个值域128~255,是一一对应的,sbyte的-128对应于ubyte的128,sbyte的-1对应于ubyte的255,依此类推
sbyte的上半个值域0~127,与ubyte的下半个值域0~127,同样一一对应,这个显然

知道整数的二进制补码表示后,这个问题就是显然的
dinjay 2011-03-30
  • 打赏
  • 举报
回复
byte是单字节的,也就是从-128~127,但是文本的数据是会超过127的,所以读到byte里就强转了,出现超过127的变为负数的情况,不知道读出来的buffer是干什么用的,如果要保存为正确的值,可以在 Log.d("data"+i,""+buf[i]);这里将buf做判断,127+负的值,就是可以了,赋给int。
或者直接将buf 转成char型也可以,char是两个字节的。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧