文件转BASE64问题、求解、、

╰_纸飞机ゝ 发布于 2013/04/19 17:19
阅读 1K+
收藏 0

  File repath = new File("E:\\Flex从入门到实践.pdf");
  FileInputStream fis = new FileInputStream(repath);
  System.out.println("长度:" + repath.length());
  byte[] buffer = new byte[(int) repath.length()];
  fis.read(buffer);
  fis.close();
  String bufferString = new BASE64Encoder().encode(buffer);
  System.out.println("bufferString:" + bufferString);

网上很多 关于、文件转BASE64 代码、我看了下都是很小的文件、、

如果是大的文件 怎么转呢? 小文件没问题 文件大了就会内存溢出、有什么好的办法转么?求解、、

加载中
0
PYPlus
PYPlus
内存溢出那是你代码有问题。还有把文件编码为base64用意还在?
╰_纸飞机ゝ
╰_纸飞机ゝ
我就直接把一个大的数据存到一个字符都会报错、保存不了一个那么大的字符串、不管怎么取、最后还是要保存到字符串,直接存字符窜都溢出、估计是电脑内存的问题、明天等老大来了瞅瞅、囧、 回复 @PYPlus :
PYPlus
PYPlus
回复 @╰_纸飞机ゝ : 我是学linux c的java只是入门。我写过base64的c代码 它是每读取3个字节24bit转换为4个字节的base64编码 所以所需内存很小不应该会溢出。你这段代码内存溢出 我觉得代码应该改为每次从那pdf读取部分的内容到buffer 再编码 这样比你这一次将pdf读出来到buffer 省内存多了。想想300m的pdf文件 编码后变为400m
╰_纸飞机ゝ
╰_纸飞机ゝ
xfire传附件呢、
0
用户名已存在
用户名已存在
文件直接以binary打开,传输byte流
╰_纸飞机ゝ
╰_纸飞机ゝ
webservice传附件来着、这个不太可行啊、发送改的话、接收方也得改、
0
PYPlus
PYPlus

引用来自“PYPlus”的答案

内存溢出那是你代码有问题。还有把文件编码为base64用意还在?
回复 @╰_纸飞机ゝ : 你似乎没看懂我的回复,我不是搞java的  java不怎么懂 说下我的理解。如你的机器2g内存 并不意味着java虚拟机就可以使用这么大的内存啊。是有参数设定的如java虚拟机最多只能使用512m大小等等。你本身代码就不应该这样写的.byte[] buffer=new byte[3];这样然后循环每次读取3个字节进行base64编码。要不然给你一个大小超过你内存的文件 你怎么编码?byte[] buffer=new byte[(int)re.length()]    这还得了
╰_纸飞机ゝ
╰_纸飞机ゝ
嗯 我刚才说的 不是针对你之前回的内容的、 我的意思是说,我电脑本身就存不了那么大的数据、你可以用C试下、设置一个变量t,t的值是24551073个1(即111111...).然后输出打印t的值.我的电脑会溢出、还可能会比24551073这个数值更大、 所以我感觉 是电脑自己内存的问题。
0
等亦或追
等亦或追
楼主解决了没?文件一大内存溢出你是怎么解决的呢?
等亦或追
等亦或追
回复 @╰_纸飞机ゝ : 如果我客户端不能直接跟ftp服务器交互呢?智能在自己的服务端在跟ftp服务器处理?那客户端怎么把文件传到服务端 servlet不能用
╰_纸飞机ゝ
╰_纸飞机ゝ
后来附件用FTP了、囧、
返回顶部
顶部