「java判断二进制文件」java 二进制数据解析
本篇文章给大家谈谈java判断二进制文件,以及java 二进制数据解析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、跪求“java中二进制怎么表示”
- 2、java 判断文件类型
- 3、java 判断是二进制文件还是文本文件
- 4、Java判断文件类型是二进制文件还是文本文件
- 5、如何判断某个文件是否为二进制文件,用Java代码来实现
- 6、java读取二进制文件流的时候怎么判断文件的类型。
跪求“java中二进制怎么表示”
java中二进制的表示:
1、Java中定义两个数,然后分别打印出它们的二进制表示(例如7和-7):
System.out.println("Java二进制7: "+Integer.toBinaryString(7));
System.out.println("Java二进制-7: "+Integer.toBinaryString(-7));
输出:
Java二进制7: 111
Java二进制-7: 11111111111111111111111111111001
7的二进制就是111
-7转化二进制的过程:
(1)把-7转化成7,二进制是 111
(2)Java中对于不满32位的int二进制自动补齐,所以变成了 (29个0)111
(3)然后取反 (29个1)000
(4)然后加1 (29个1)001
扩展资料:
c语言中二进制的转换:
用函数转换itoa(值,数组名,进制)
#includestdio.h
#includestdlib.h
void main()
{
char str[8];
int i=8;
itoa(i,str,2);
printf("%s",str);
}
参考资料:
java二进制——百度百科
java 判断文件类型
如果只是简单的复制、截取等操作,直接使用字节流对文件进行I/O操作就可以了;
一般判断一个文件是否是二进制文件,只是判断一下文件的内容中是否含有0x00-0x07这八个字符内容,如果有的话,就是二进制文件。
java 判断是二进制文件还是文本文件
判断是否存在控制字符:这个也靠谱,但是难度比较大,因为有些Unicode文件在开头放了控制字符,所以必须处理这种特殊情况。(我记得有些编辑器就是这样判断文件是否为二进制的)
这些答案都算靠谱,也有不靠谱的。居然有人回答:文本终究也是二进制的,所以你没办法判断!NND,这就好像说:Women 本质上就是 Men(人),所以你没法判断 Women 和 Men (男人)
言归正传,除了以上的三种方法外,如果要求不是那么严格,可以用文件的mime type来进行判断,以下的Groovy代码虽然不太直观,但是胜在短小:
在Java下道理是一样的,先获得URL对象,然后打开连接,获取内容类型……只不过多写几行罢了。
Java判断文件类型是二进制文件还是文本文件
下面转载一下别人的方法
1、判断字符范围。
该方式主要是针对英文字符的,如果文件中有中文字符就会判断失败。比如:
char c;
f.read(c, sizeof(c));
if (c 32 c != 9 c != 10 c != 13)
{
return;
}
该方式针对256以下的字符问题都不大,一旦遇到双字节中文就会出现c为负数的情况,导致判断失败。
2、判断有没有char(0)字符。
二进制文件基本上都会有char(0),注意,是“基本上” 。
我尝试通过这个方式来判断,发现判断正确率很高,我手头的二进制STL文件都能够判断正确,但是总觉得这种方式不够保险,如果刚好某个二进制文件没有char(0)怎么办???
3、文件大小对比法。
以文本方式 打开文件,取一段数据(比如1024字节),存为string,再写入tmp文件,如果新文件的大小还是1024字节,应该就是文本文件了。否则就是二进制文件。
该方法我没有认证,但是纯粹从描述上来说,还是比较有效的。以我的理解,该方法在本质上还是方法1和方法2的结合,相比方法1来说,方便了中文字符的判断,相比方法2来说,更为保险一些。其本质就是通过将二进制文件转换为字符串,将一些无效字符过滤掉(比如char(0),回车等等),导致大小发生变化。但同样的该方法也有漏洞,如果二进制文件中刚好没有回车,没有char(0)怎么办???
4、无效字符比例法。
该方法是基于方法1的一种概率判断,遍历文件中的所有字符,对方法1中认定的无效字符进行计数,如果无效字符数量达到一定比例(这个比例值是经验值,根据自己的程序运行环境自由设定),则认为是二进制文件。
同方法1一样,无法对中文字符进行有效的判断,一个全为中文的文本文件,肯定会被认定为二进制文件。
5、严格对比法。
逐字节读取,然后满足以下任何一个条件那么就是二进制文件:
1)所读取字节大于127并且小于160;
2)所读取字节大于等于160并且不成对出现;(注:大于等于160并成对出现的是汉字,其他UNICODE字符集编码格式不是很清楚)
3)所读取字节小于32并且不等于9(TAB)、10(换行) (注: 10 是UNIX格式文本换行)
4)所读取字节小于32并且等于13(回车)但是之后的字节并不是10(换行) (注:13 10 是DOS格式文本换行)
该方法是最严谨的,也是判断最复杂的,效率最低的,一个较大的文件判断起来肯定会很慢。
如何判断某个文件是否为二进制文件,用Java代码来实现
转个过来,每种类型的文件前几个字节固定,可以根据头部几个字节判断文件格式
图片的格式很多,一个图片文件的后缀名并不能说明这个图片的真正格式什么,那么如何获取图片的格式呢?我想到了几个简单但有效的方法,那就是读取图片文件的文件头标识。我们知道各种格式的图片的文件头标识识不同的,因此我们可以通过判断文件头的标识来识别图片格式。
我对各种格式的图片文件头标识进行了分析,不仅查找资料,也用十六进制编辑器察看过图片的文件头,以下是我收集、分析的结果,供大家参考。
1.JPEG/JPG
-
文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): $ff, $d9
(EOI)
2.TGA
- 未压缩的前5字节 00 00 02 00 00
- RLE压缩的前5字节 00 00
10 00
00
3.PNG
- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A
0A
4.GIF
-
文件头标识 (6 bytes) 47 49 46 38 39(37)
61
G I F 8 9
(7) a
5.BMP
- 文件头标识
(2 bytes) 42 4D
B
M
6.PCX
- 文件头标识 (1
bytes) 0A
7.TIFF
- 文件头标识 (2 bytes)
4D 4D 或 49
49
8.ICO
- 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20
9.CUR
- 文件头标识 (8 bytes) 00 00 02 00 01 00 20
20
10.IFF
-
文件头标识 (4 bytes) 46 4F 52
4D
F O R M
11.ANI
- 文件头标识 (4 bytes)
52 49 46
46
R I F F
根据这些文件头标识的收集,我可以写一个识别图像格式的模块了。但是在写这个模块之前可以对收集到的文件头标识进行优化,使得程序中字符串比对次数尽量的少。
1.JPEG我们知需要比对文件头的$ff,
$d8这两个字符,而不用读取最后的两个结束标识了。
2.TGA,ICO,CUR只需比对第三个与第五个字符即可。
3.PNG比对[89][50]这两个字符。
4.GIF比对[47][49][46]与第五个字符。
废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如
jpg文件
是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)
BMP文件 是 424D
---4D42
其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。
java读取二进制文件流的时候怎么判断文件的类型。
这个不应该靠判断数据去判断。应该另外增加一个叫content_type数据类型的数据库的列。
然后在存入时写上数据类型,比如按MIME类型application/word之类,也可以枚举节约空间。
读取时根据该列的类型,给出后缀名。
也可以直接把原后缀名存在某列中。
也可以把原文件名存在某列中,而原文件放在某位置,并不入库。
关于java判断二进制文件和java 二进制数据解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。