背景:因为HDFS小文件太多了 导致HDFS集群压力很大 所以项目由原来的存储文件方式改成了 把文件流以二进制的方式存入一个个大的文件块 通过文件 位置信息和偏移量信息来标记文件
网上很多通过APK路径 来获取APK的签名和权限列表的 但是直接对接流的基本没有 而且封装的方法 也没有好的可以接入流的接口
通过输入流获取APK签名:
思路:
截取HDFS中APK输入流
再截取APK中RSA的文件流 保存到本地
结合cmd命令
keytool -printcert -file rsaFilePath
打印出RSA文件的MD5和SHA1值 截取 保存
/** * DESC: 获取HDFS中apk文件的签名:MD5、SHA1 * @param filePath : /tmp/a/b/c.apk * @param position : 位置信息 * @param offset : 偏移量 * */ public static Map<String,String> getAPKSignV2(String filePath,long position, int offset){ getHDFS(); Map<String, String> signMap = new HashMap<>();/**用来存放MD5、SHA1的签名*/ Path path = new Path(filePath); FSDataInputStream dataStream; try { dataStream = hdfs.open(path); InputStream new_dataStream=getInputStreamByPosAndOffset(dataStream,position,offset); getApkSignInfo(new_d