论apache重复造的轮子

今天分享一下apache所重复造的轮子(FileUtils.readLines)

在org.apache.cxf.helpers 这个包下有个工具类也叫做FileUtils,和我们平时常用的 org.apache.commons.io 下面的工具类名称一致。那么在开发中使用导包ctrl+shift+o 快捷键导包,非常容易引用错误包,如果不涉及到字符集编码还好,否则容易走弯路。

今天分析一下 这个同名工具中的一个同名方法:readFile(File file)

public static List readLines(File file) throws IOException

l两个类中的方法明、参数类型、个数、返回值、异常类型完全一致。
但是 io包下的 FileUtils 进行了重写,同时提供了
public static List readLines(File file, String encoding) throws IOException 这个方法,有了这个方法为编程提供了便捷。

比较一下具体实现:(比较简单)

  • cxf readLines 使用的是FileReader 读取文件 ,传入BufferedReader中,然后循环变量出每一行存入list ,然后返回。
  public static List<String> readLines(File file) throws Exception {
        if (!file.exists()) {
            return new ArrayList<String>();
        }
        BufferedReader reader = new BufferedReader(new FileReader(file));
        List<String> results = new ArrayList<String>();
        try {
            String line = reader.readLine();
            while (line != null) {
                results.add(line);
                line = reader.readLine();
            }
        } finally {
            reader.close();
        }
        return results;
    }
  • io包下的readFile方法逻辑更为严谨,明确判断了输入参数是文件,还是文件夹等。具体实现是使用的是同包下 IOUtils 提供的readLines方法这个方法中进行了 输入参数字符集的判断,如果字符集参数为空则使用InputStreamReader(input) 完成文件行读取,存入list返回。 如果字符集参数不为空 则使用了 InputStreamReader(InputStream in, String charsetName)
   public static List<String> readLines(File file, String encoding) throws IOException {
        InputStream in = null;
        try {
            in = openInputStream(file);
            return IOUtils.readLines(in, encoding);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }


public static List<String> readLines(InputStream input, String encoding) throws IOException {
        if (encoding == null) {
            return readLines(input);
        } else {
            InputStreamReader reader = new InputStreamReader(input, encoding);
            return readLines(reader);
        }
    }



public static List<String> readLines(Reader input) throws IOException {
        BufferedReader reader = new BufferedReader(input);
        List<String> list = new ArrayList<String>();
        String line = reader.readLine();
        while (line != null) {
            list.add(line);
            line = reader.readLine();
        }
        return list;
    }

回到主题,apache为什么这么做呢?
1:减少依赖
2:完全两个团队开发相互不知道对方有轮子
3:。。。

### 分布式系统中的数据加密 在分布式环境中实施有效的安全措施至关重要,尤其是针对数据传输和存储阶段的安全保障。当前存在多种框架支持分布式计算环境下的作业执行,如Hadoop MapReduce、Apache Spark等[^1]。然而,在考虑如何实现数据加密实验时,不仅需关注上述提到的用于处理大规模数据集的技术栈,还需引入专门设计来保护信息安全的方法论。 对于希望开展有关于分布式系统的数据加密研究者而言,可以参考如下几个方面: #### 选择合适的加密技术 - **对称密钥加密**:适用于节点间频繁交换的小量敏感信息场景; - **非对称公私钥体系**:适合身份验证过程或初次建立连接时传递会话密钥; - **混合模式**:结合两者优点,先用非对称方式共享一次性使用的对称密钥,之后再利用高效能较高的对称算法完成后续通信内容加解密操作。 #### 使用开源项目作为起点 有许多现成可用的解决方案可以帮助加速原型搭建进度并减少重复轮子的工作量。例如: - **Apache Accumulo** 是一个基于Google Bigtable概念构建的大规模分布式的键值数据库管理系统,并内置了细粒度访问控制机制和支持端到端的数据加密功能。 - **OpenSSL Project** 提供了一套全面且易于集成的安全协议库和服务接口,可用于增强应用程序层面的信息保密性和完整性校验能力。 #### 设计合理的测试方案 考虑到实际应用场景复杂多变的特点,在规划具体的试验流程之前应当充分评估可能面临的挑战因素,包括但不限于网络延迟波动、硬件资源竞争状况以及潜在攻击面暴露风险等等。建议采用分层架构思路逐步推进整个项目的建设工作,即从单机环境下简单的文件读写练习做起,逐渐过渡至跨集群范围内的综合演练环节。 ```bash # 安装 OpenSSL 库 (以 Ubuntu 系统为例) sudo apt-get update && sudo apt-get install openssl libssl-dev -y ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值