• 文件拷贝io nio比较


    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.file.Files;
    
    public class FileCopy {
        public static void fileCopyByByte(String inPah, String outPah)
                throws FileNotFoundException, IOException {
            byte[] byteArray = new byte[1024];
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                    inPah));
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(outPah));
            int readCount = 0;
            while ((readCount = bis.read(byteArray)) != -1) {
                bos.write(byteArray, 0, readCount);
                bos.flush();
            }
            bis.close();
            bos.close();
        }
    
        public static void fileCopyByChar(String inPah, String outPah)
                throws FileNotFoundException, IOException {
            char[] charArray = new char[1024];
            BufferedReader reader = new BufferedReader(new FileReader(inPah));
            BufferedWriter writer = new BufferedWriter(new FileWriter(outPah));
            int readCount = 0;
            while ((readCount = reader.read(charArray)) != -1) {
                writer.write(charArray, 0, readCount);
                writer.flush();
            }
            reader.close();
            writer.close();
        }
    
        public static void fileCopyByFileChannel(String inPah,String outPah) throws FileNotFoundException,IOException{
            FileInputStream fis = new FileInputStream(inPah);
            FileOutputStream fos = new FileOutputStream(outPah);
            FileChannel fileChannel_from = fis.getChannel();
            FileChannel fileChannel_to = fos.getChannel();       
    
            ByteBuffer bytebuffer = ByteBuffer.allocate(1024);
            
            // Read data from file into ByteBuffer
            int bytesCount;
            while ((bytesCount = fileChannel_from.read(bytebuffer)) > 0) {
             //flip the buffer which set the limit to current position, and position to 0             
             bytebuffer.flip();
             //write data from ByteBuffer to file
             fileChannel_to.write(bytebuffer);
             //for the next read
             bytebuffer.clear();
            }
            fileChannel_from.close();
            fileChannel_to.close();
        }
        public static void fileCopyByFileChannelMap(String inPah,String outPah) throws FileNotFoundException,IOException{
            FileInputStream fis = new FileInputStream(inPah);
            FileOutputStream fos = new FileOutputStream(outPah);
            FileChannel fileChannel_from = fis.getChannel();
            FileChannel fileChannel_to = fos.getChannel();       
            
            MappedByteBuffer bytebuffer = fileChannel_from.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel_from.size());
            fileChannel_to.write(bytebuffer);
            bytebuffer.clear();
            fileChannel_from.close();
            fileChannel_to.close();
        }
    
        public static void main(String[] args) {
            try {
                String in = "E:/小说/左道旁门.txt";
                long begin = System.currentTimeMillis();
                fileCopyByByte(in, "e:/2");
                System.out.println(System.currentTimeMillis() - begin);
                begin = System.currentTimeMillis();
                fileCopyByFileChannel(in, "e:/3");
                System.out.println(System.currentTimeMillis() - begin);
                begin = System.currentTimeMillis();
                fileCopyByFileChannelMap(in, "e:/4");
                System.out.println(System.currentTimeMillis() - begin);
                begin = System.currentTimeMillis();
                Files.copy(new File(in).toPath(), new File("e:/5").toPath());
                System.out.println(System.currentTimeMillis() - begin);
                
            } catch (FileNotFoundException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            }
        }
    }

    十几M小文件

    360
    843
    672
    641

    100多M文件

    19547
    5610
    2703
    8718

    300多M文件

    41156
    13609
    8563
    9500

    1.7G文件

    202156
    225109

    出错,可能超过限制
    163719

  • 相关阅读:
    USACO 3.3.1 Riding the Fences 骑马修栅栏(欧拉回路)
    USACO 3.2.6 Sweet Butter 香甜的黄油(最短路)
    USACO 1.3.4 Prime Cryptarithm 牛式(模拟枚举)
    USACO 1.3.3 Calf Flac(Manacher算法)
    USACO 1.2.2 Transformations 方块转换
    小希的迷宫(并查集判环)
    Is It A Tree?(并查集)
    Manacher算法——求最长回文子串
    Live Love(思维)
    Longge's problem(欧拉函数应用)
  • 原文地址:https://www.cnblogs.com/tonggc1668/p/7222983.html
Copyright © 2020-2023  润新知