【Java】文件读取相关知识点

本文探讨了在Java中安全地读取文件的方法,尤其是如何通过BoundedInputStream防止DoS攻击,限制文件大小为30KB。同时,提到了将Map数据存储到文件中的技巧,并引用了Guava Cache的使用,以及Java定时任务的实现,包括GuavaCache的数据对比策略和文件写入的多种方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、BoundedInputStream

参考链接: https://codingdict.com/questions/112066

问题:使用Java读取文件或流的最可靠方法(以防止DoS攻击),限制文件大小
private static final int MAX_FILE_SIZE = 30 * 3;
private static final int MAX_CONTENT_LENGTH = 30;
测试方法:
** BoundedInputStream 不抛出异常**

    @Test
    public void testFile() {
   
        // 步骤一: 写入字符串
        String writeData = "FileUtils 牛皮 FileUtils 牛皮 FileUtils 牛皮";
        try {
   
            FileUtils.writeStringToFile(new File(fileName), writeData, StandardCharsets.UTF_8, false);
            System.out.println("写入成功,字符串长度为: " + writeData.length());
        } catch (IOException e) {
   
            e.printStackTrace();
        }

        // 步骤二: 读取字符串
        try {
   
            InputStream inputStream = new FileInputStream(fileName);
            // 规定读取的内容大小为MAX_CONTENT_LENGTH, 文件的内容大小为MAX_FILE_SIZE: BoundedInputStream 不抛出异常
            String content = getContentFromInputStream(inputStream, MAX_FILE_SIZE, MAX_CONTENT_LENGTH);
            System.out.println("读取的内容为:" + content);
        } catch (Exception e) {
   
            System.out.println("has an error");
        }
    }

getContentFromInputStream方法

    public static String getContentFromInputStream(InputStream inputStream, int maxFileSize, int maxContentLength) {
   
        // 超长, 不换行
        BoundedInputStream boundedInput = new BoundedInputStream(inputStream, maxFileSize);

        // todo: StringBuilder变量的资源耗尽(当文件包含的数据大于可用内存时)
        StringBuilder stringBuilder = new StringBuilder();

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(boundedInput));
        String lineSeparator = System.getProperty("line.separator");
        String fileLine
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值