教你如何用java定义一个属于自己的文件

关于文件格式,引用一下百度百科的定义:

文件格式(或文件类型)是指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。比如有的储存图片,有的储存程序,有的储存文字信息。每一类信息,都可以一种或多种文件格式保存在电脑存储中。每一种文件格式通常会有一种或多种扩展名可以用来识别,但也可能没有扩展名。扩展名可以帮助应用程序识别的文件格式。

对于硬盘机或任何电脑存储来说,有效的信息只有0和1两种。所以电脑必须设计有相应的方式进行信息-位元的转换。对于不同的信息有不同的存储格式。文件格式也意味着文件的用途。

关于上面一段话,个人觉得比较重要的是:对于所有的文件,对于计算机来说还是二进制流(0和1)。

一、规定二进制流协议

所有的文件对于计算机来说都是二进制流,那么我们需要去规定一下二进制协议:

1. 文件类型(1:xxx文件,2:yyy文件)

2. 文件类型所占长度(1字节)

3. 版本号(1,2,3...)

4. 版本号所占长度(1字节)

5. 文件二进制流所占长度(4个字节)

6. 其他拓展文件所占长度(json字符串,图像等2个字节)

二、按照规定协议写入二进制流

File targetFile = new File(targetFilePath);
if(!targetFile.getParentFile().exists()){
    targetFile.getParentFile().mkdirs();
}
OutputStream out = new FileOutputStream(targetFile);
// 写入文件类型
out.write(fileType);
// 写入文件协议版本号
out.write(version);

文件首先base64,然后计算base64之后的byte长度,然后写入:

String fileBase64Str = Base64Util.encodeBase64File(srcFilePath);
out.write(ByteUtil.intToBytes(fileBase64Str.getBytes().length));

拓展部分长度写入,也是首先base64之后计算长度,然后写入:

// 写入拓展部分大小
String encodedText = encoder.encodeToString(configJson.getBytes("UTF-8"));
byte[] configJsonBytes = encodedText.getBytes("UTF-8");
byte[] configJsonByteLength = ByteUtil.intToByte2(configJsonBytes.length);
out.write(configJsonByteLength);

文件二进制流写入:

out.write(fileBase64Str.getBytes());

拓展部分二进制流写入:

out.write(configJsonBytes);
out.close();

写入之后的结果如下:

用pdf打开之后的结果如下:

ps:荣耀的背后总是刻着一道孤独!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值