d16
IO中的其他流
RandomAccessFile
1.Seek()
绝对的量
2.skip()
相对值。
3.
- 随机访问文件,自身具备读写方法
- 通过SkipBytes(int),seek(int x)来达到随机访问
管道流
PipedInputStream PipedOutputStream
输入输出可以直接进行链接,通过结合线程实用
=========================================================================
多线程拷贝
package D16;
import java.lang.*;
import java.io.File;
import java.io.RandomAccessFile;
public class MulThreadCopyFile {
static int i = 0;
static int block = 0;
public static void main(String[] args) {
//原文件
File srcFile = new File("/Users/ifeng/Desktop/iotest/2012年建模论文集的副本");
RandomAccessFile srcRaf = new RandomAccessFile(srcFile,"r");
//文件长度
int srcLength = (int)srcFile.length();
//目标文件
File destFile = new File("/Users/ifeng/Desktop/iotest/11111/");
final RandomAccessFile raf = new RandomAccessFile(destFile,"rw");
raf.setLength(srcLength);
//实用线程数
int count = 3;
//计算每个线程复制的文件块大小
if(srcLength % count == 0){
block = srcLength / count;
}
else {
block = srcLength / count + 1;
}
//开启count个线程
for(i = 0; i < count ; i ++){
Thread t = new Thread() {
public void run(){
int start = i * block;
int end = 0;
//是否是最后一个线程
if(i != (count-1)){
end = (i + 1) * block -1;
}
else {
end = srcLength - 1;
}
//定位文件指针
raf.seek(start);
//
int bufSize = end - start + 1 ;
byte[] buf = new byte[bufSize];
srcRaf.read(buf);
destRaf.write(buf);
}
};
t.start();
}
Thread.sleep(1000);
System.out.println("over");
}
}
串行化(序列化)
将java对象转化成某种格式(JVM定义的)字节数组
反串行化
将字节数组恢复成java对象
java.io.Sreializable
1.可串行化接口
2.标示性接口
3.JVM
DeepCopy
深度复制