MyStringBuffer-删除delete

本文详细介绍了一种自定义的MyStringBuffer类实现,该类实现了字符串缓冲区的功能,包括字符串的追加、插入、删除、反转等操作,并通过实例演示了如何使用该类进行字符串操作。
package day6;
/*
 * 删除 delete
 */
public class MyStringBuffer5 implements IStringBuffer {

	int capacity = 16;
    int length = 0;
    char[] value;
    public MyStringBuffer5(){
        value = new char[capacity];
    }
     
    //有参构造方法
    public MyStringBuffer5(String str){
        this();
        if(null==str)
            return;
         
        if(capacity<str.length()){
            capacity  = value.length*2;
            value=new char[capacity];
        }
         
        if(capacity>=str.length())
            System.arraycopy(str.toCharArray(), 0, value, 0, str.length());
         
        length = str.length();
         
    }
     
    @Override
    public void append(String str) {
 
        insert(length,str);
    }
 
    @Override
    public void append(char c) {
        append(String.valueOf(c));
         
    }
 
    @Override
    public void insert(int pos, char b) {
        insert(pos,String.valueOf(b));
    }
 
    @Override
    public void delete(int start) {//删除
         
        delete(start,length);
    }
 
    @Override
    public void delete(int start, int end) {//删除 delete
        //边界条件判断
    	//是否合法
        if(start<0)
            return;
         
        if(start>length)
            return;
         
        if(end<0)
            return;
         
        if(end>length)
            return;
         
        if(start>=end)
            return;
         
        System.arraycopy(value, end, value, start, length- end);//先把已经存在的数据往后移,注意这里用的arraycopy
        length-=end-start;//删除之后的长度
         
    }
 
    @Override
    public void reverse() {
 
        for (int i = 0; i < length/2; i++) {
             
            char temp = value[i];
            value[i] = value[length-i-1];
            value[length-i-1] = temp;
        }
         
    }
 
    @Override
    public int length() {
        // TODO Auto-generated method stub
        return length;
    }
 
    @Override
    public void insert(int pos, String b) {
 
        //边界条件判断
        if(pos<0)
            return;
         
        if(pos>length)
            return;
         
        if(null==b)
            return;
         
        //扩容
        while(length+b.length()>capacity){
            capacity = (int) ((length+b.length())*1.5f);
            char[] newValue = new char[capacity];
            System.arraycopy(value, 0, newValue, 0, length);
            value = newValue;
        }
         
        char[] cs = b.toCharArray();
         
        //先把已经存在的数据往后移
         
        System.arraycopy(value, pos, value,pos+ cs.length, length-pos);
        //把要插入的数据插入到指定位置
        System.arraycopy(cs, 0, value, pos, cs.length);
         
        length = length+cs.length;
         
    }
     
    public String toString(){
         
        char[] realValue = new char[length];
 
        System.arraycopy(value, 0, realValue, 0, length);
         
        return new String(realValue);
         
    }
     
    public static void main(String[] args) {
        MyStringBuffer5 sb = new MyStringBuffer5("there light");
        System.out.println(sb);
        sb.insert(0, "let ");
        System.out.println(sb);
 
        sb.insert(10, "be ");
        System.out.println(sb);
        sb.insert(0, "God Say:");
        System.out.println(sb);
        sb.append("!");
        System.out.println(sb);
        sb.append('?');
        System.out.println(sb);
        sb.reverse();
        System.out.println(sb);
         
        sb.reverse();
        System.out.println(sb);
         
        sb.delete(0,4);
        System.out.println(sb);
        sb.delete(4);
        System.out.println(sb);
 
    }

}
<think>嗯,用户现在想了解rsync命令中的参数-azvtP--delete-delay的具体用法以及它们配合使用的场景。首先,我需要回顾一下rsync的基本知识,然后逐个分析这些参数的作用,再结合使用场景给出例子。 首先,参数-azvtP。根据引用[3],-a通常表示归档模式,保持文件属性,相当于-rlptgoD。而-z是压缩传输,节省带宽。-v是详细输出,显示操作过程。-t保持文件的时间戳,这在同步时很重要,避免不必要的重复传输。-P是显示进度并支持部分传输,这对于大文件传输很有帮助。所以组合起来,-azvtP应该是在归档模式下,压缩传输,保持时间戳,显示详细信息进度。 接下来是--delete-delay参数。用户之前可能了解过--delete,它会在同步过程中删除目标端多余的文件。而--delete-delay则是延迟删除,直到所有文件传输完成后再进行删除。这样可以防止在传输过程中因中断导致目标端文件丢失,提高数据的安全性。 用户的应用场景可能涉及需要同步大量文件,同时确保目标端与源端严格一致,但又要避免同步过程中的意外中断导致数据丢失。例如,在备份重要数据时,使用--delete-delay可以在传输完成后再删除多余文件,减少风险。 需要确认这些参数如何配合使用。例如,当使用-azvtP进行传输时,加上--delete-delay,rsync会先传输所有文件,最后再处理删除操作。这对于网络不稳定或传输大文件的情况特别有用。 另外,用户可能想知道与其他删除选项(如--delete-before或--delete-after)的区别。根据之前的引用,--delete-delay是在传输完成后计算删除,而--delete-before是在传输前删除,可能影响传输效率,而--delete-after则在传输后删除,但可能在传输过程中占用更多空间。因此,选择--delete-delay可以在效率安全性之间取得平衡。 最后,给出具体的使用示例,帮助用户理解如何在实际命令中使用这些参数。比如同步本地目录到远程服务器,并确保删除多余文件时使用延迟删除,确保数据完整性。</think>### rsync参数`-azvtP --delete-delay`详解及使用场景 #### 一、参数组合解析 1. **`-azvtP` 参数分解** - **`-a`**(archive mode): 归档模式,等效于`-rlptgoD`,保持文件属性(权限、时间戳等),递归同步目录结构[^3] - **`-z`**(compress): 传输时启用压缩,减少网络带宽占用[^3] - **`-v`**(verbose): 显示详细同步过程,便于调试监控 - **`-t`**(times): 保持文件修改时间属性,确保目标文件时间戳与源文件一致 - **`-P`**(progress + partial): 显示实时传输进度,并支持断点续传功能 2. **`--delete-delay` 参数特性** 与标准`--delete`不同,该参数会在**文件传输完成后**再删除目标端多余文件。相较于其他删除策略: - `--delete-before`:同步前删除多余文件(可能影响传输效率) - `--delete-during`:传输过程中删除(可能增加内存消耗) - `--delete-after`:传输后删除(默认策略) - `--delete-delay`:先记录待删除文件列表,最后统一删除(降低IO压力) $$ \text{删除策略对比公式:安全性} \propto \frac{\text{延迟时间}}{\text{资源消耗}} $$ #### 二、典型使用场景 1. **跨网络大文件同步** 配合`-z`压缩与`-P`进度显示,适用于跨国/跨机房文件同步,例如: ```bash rsync -azvtP --delete-delay /data/backup/ user@remote:/backup/ ``` 2. **敏感数据维护** 在需要保持目录严格一致性的场景(如数据库备份目录),通过延迟删除避免误删正在使用的文件: ```bash rsync -azvtP --delete-delay --exclude="*.tmp" /live_db/ standby@server:/replica/ ``` 3. **高可用系统部署** 在负载均衡节点间同步配置文件时,延迟删除可防止服务中断: ```bash rsync -azvtP --delete-delay /etc/nginx/ nginx-node2:/etc/nginx/ ``` #### 三、参数配合优势 | 参数组合 | 优势特征 | 适用场景 | |-----------------|----------------------------|----------------------------| | `-azvtP` | 属性保持+压缩传输+进度监控 | 大文件/跨网络传输 | | `--delete-delay`| 降低IO峰值+减少误删风险 | 高可用系统/敏感数据同步 | #### 四、注意事项 1. 使用`--delete-delay`时需确保目标端有足够存储空间(传输期间会保留待删除文件) 2. 在Windows与Linux间同步时,注意`-a`参数可能引发权限问题(建议配合`--no-perms`) 3. 建议先用`-n`参数进行预演测试
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值