从InputStream读取文件头

可以从文件头里面读取出文件类型

上一下伪代码

// 读取20前面20个字节,不同文件文件头可能长度不一样
byte[] bytes = new byte[20];
BufferedInputStream.read(bytes,0,bytes.length);
Stringbuilder build = new Stringbuilder();
for(byte b:bytes){
	//这个是保证转成int之后,低8位比特位依然正确
	int val = b&0xff;
	String hexString = Inter.toHexString(val);
	if(hexString.length < 2){
		build .append(0);
	}
	build .append(hexString );
}
String fileTypeCode = build.toString().toUpperCase(Locale.ENGLISH);

原理

从文件读取的InputStream,前面几个字节是文件头,这个可能根据文件类型不一样,文件头有文件信息;这里面字节都是16进制的;我们可以获取这个16进制的字符串形式来进行判断;JDK的Inter有提供获取16进制字符串的方法;但是我们需要将字节转化成int;然后b&0xff;byte是8位比特位,b&0xff是为了保持8个比特位不变,然后根据这个int类型通过Inter.toHexString获取16进制的字符串;
比如xml的16进制字符串是“3C3F78D6C”,只要解析出来的String是否startWith(“3C3F78D6C”)由此可以判断是否是xml类型文件;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值