文件操作时的问题

来源:互联网 发布:linux启动卡在进度条 编辑:程序博客网 时间:2024/06/05 22:56

最近项目上线好久的功能 (文件下载) 突然出现了问题,经过一翻查找,发现文件二进制保存至数据库前 是完整、保存在数据库也是完整的, 但下载读取时如果是TXT文本时,由于是按数组[1024] 读取的,如果文件小于 1024 一次可以读完的话则没有问题,大于1024时 正常结束会多出一部分重复文本;

问题代码

 //从DB中读取文件里流,生成文件            StringBuilder fileBuilder = new StringBuilder();            byte[] buff = new byte[1024];            BASE64Encoder encoder = new BASE64Encoder();            while (in.read(buff) > 0) {                fileBuilder.append(encoder.encode(buff));            }
  1. 它是按每次1024长度的数组去读,按位进行插入且数组只有1个1024长度 一个一个替换,也就是说如果 文件为 1524,那么多出来的500替换在前面,后门的524 仍是上次读出来的数据;
  2. 于是 我们采取用一个字节数组输出流,先将读出来的内容写在流中,最后统一处理;
    修改后
//从DB中读取文件里流,生成文件            StringBuilder fileBuilder = new StringBuilder();            byte[] buff = new byte[1024];            BASE64Encoder encoder = new BASE64Encoder();            bos = new ByteArrayOutputStream();            int len = -1;            while ((len = in.read(buff)) != -1) {                  bos.write(buff, 0, len);            }            bos.flush();            fileBuilder.append(encoder.encode(bos.toByteArray()));