A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 nailsoul 于 2012-5-13 16:24 编辑

RandomAccessFile 里面应该没有定义缓冲区数组吧?  我在那个类里面没看到数组成员变量 如果有的话  如果一个文件足够大的话 全部存储在byte数组中会发生堆内存溢出啊   还有用该类时我不用数当缓冲区 复制一个大文件时慢的跟乌龟爬似的  还有我下面的代码为什么复制完文件以后 播放不了啊 ?  复制后的文件跟复制前的文件一样大的 啊
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.RandomAccessFile;
  5. import java.util.Collections;

  6. public class RandomAccessInputSreamDemo {
  7. public static void main(String[] args) throws IOException {
  8. String s=new String();
  9. CopyFile cf1=new CopyFile(s);
  10. CopyFile cf2=new CopyFile(s);
  11. CopyFile cf3=new CopyFile(s);
  12. CopyFile cf4=new CopyFile(s);
  13. cf1.start();
  14. cf2.start();
  15. cf3.start();
  16. cf4.start();

  17. }
  18. }
  19. class CopyFile extends Thread{
  20. private static int count =0;
  21. private String lock;
  22. public CopyFile(String lock){
  23. this.lock=lock;
  24. }
  25. @Override
  26. public void run(){
  27. RandomAccessFile readRaf=null;
  28. RandomAccessFile raf=null;
  29. try {
  30. readRaf=new RandomAccessFile("c:/张孝祥JAVA基础2_1.avi","r");
  31. raf=new RandomAccessFile("d:/张孝祥JAVA基础2_1.avi","rw");
  32. long fileLength=readRaf.length();
  33. long tmpLen=fileLength/4;
  34. long copyLength=0;
  35. synchronized(lock){
  36. copyLength=count==3?fileLength-1:(tmpLen+1)*count-1;
  37. raf.seek(count*tmpLen);
  38. readRaf.seek(count++*tmpLen);
  39. }
  40. int number=(int)(copyLength/(1024*1024*3));
  41. int tmp=(int)(copyLength-number*(1024*1024*3));
  42. byte buf[]=new byte[1024*1024*3];
  43. while(readRaf.getFilePointer()<=copyLength){
  44. if(number--==1){
  45. buf=new byte[(1024*1024*3)+tmp];
  46. }
  47. int b=readRaf.read(buf);
  48. raf.write(buf,0,b);
  49. }
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }finally{
  53. try {
  54. readRaf.close();
  55. raf.close();
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }

  59. }
  60. }

  61. }
复制代码

1 个回复

倒序浏览
自己沙发
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马