文件断点续传 RandomAccessFile

文件断点续传

最近因为开发任务,涉及到一个文件断点续传,看了一下重点就是RandomAccessFile

RandomAccessFile

随机存取文件。一个随机访问文件的行为就像一个大的存储在文件系统中的字节数组。有一种光标,或索引进入隐含数组,称为文件指针;输入操作从文件指针开始读取字节并前进文件指针超过读取的字节。如果随机访问文件是以读/写模式创建,输出操作也可用;输出操作从文件指针开始写入字节并前进文件指针超过所写的字节。输出操作写超过隐含数组的当前末尾导致数组为扩展

我用GUI搞了个界面,看着更直观一点,不多说上代码,一个简单的Demo

发送文件:

/**
 * 断点续传 ----发送方
 */
public class DDXCSendFile extends Thread {
   

    private Socket socket = null;

    //输入输出字节流
    private DataOutputStream dataOutputStream;
    private DataInputStream dataInputStream;

    //随意读取文件类
    private RandomAccessFile randomAccessFile;

    //搞一个GUI界面
    private JFrame jFrame;
    private Container container;
    private JLabel jLabel;
    private JProgressBar jProgressBar;

    public DDXCSendFile() {
   
        jFrame = new JFrame("oO=断点续传=Oo");
        try {
   
            socket = new Socket("localhost", 8080);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }

    //上传方法
    public void run() {
   
        //文件选择器
        JFileChooser jFileChooser = new JFileChooser();
        int dialog = jFileChooser.showOpenDialog(null);

        if (dialog == JFileChooser.APPROVE_OPTION) {
   
            String path = jFileChooser.getSelectedFile().getPath();

            try {
   

                dataOutputStream = new DataOutputStream(socket.getOutputStream());
                dataInputStream = new DataInputStream(socket.getInputStream());
                dataOutputStream.writeUTF("ok");

                //读取这个文件,权限只是读取
                randomAccessFile = new RandomAccessFile(path, "r");
                File file = new File(path);

                byte[] bytes = new byte[1024];
                dataOutputStream.writeUTF(file.getName());
                dataOutputStream.flush();
                String readUTF = dataInputStream.readUTF();

                if (readUTF.equals("ok")) {
   
                    //已发送大小
                    long readLong = dataInputStream.readLong();
                    dataOutputStream.writeLong(randomAccessFile.length());
                    dataOutputStream.writeUTF("ok");
                    dataOutputStream.flush();

                    //偏移量--及发送了多少
                    long offset = readLong;
                    int sendSize = (int) (randomAccessFile.length() / 1024);
                    int sendOffset = (int) (offset / 1024);

                    //发送窗口
                    jFrame.setSize(300, 300);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值