Java入门19

版权声明:本文为博主原创文章,转载请声明本博主原创 https://blog.csdn.net/weixin_39381833/article/details/86688002

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

深度复制

猜你喜欢

转载自blog.csdn.net/weixin_39381833/article/details/86688002