小编Fre*_*ger的帖子

Java File.listFiles() 根据 `exists()` 返回不存在的文件

我在我们的生产代码中注意到了这个问题:

java.lang.IllegalArgumentException: /somePath/?.png does not exist
    at org.apache.commons.io.FileUtils.sizeOf(FileUtils.java:2413)
    at org.apache.commons.io.FileUtils.sizeOfDirectory(FileUtils.java:2479)
Run Code Online (Sandbox Code Playgroud)

根本原因是这样的:

import java.io.File;

public class FileNameTest
{

    public static void main(String[] args)
    {
        File[] files = new File("/somePath").listFiles();
        for (File file : files)
        {
            System.out.println(file + " - " + (file.exists() ? "exists" : "missing!!"));
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

0.png - exists
7.png - exists
4.png - exists
8.png - exists
1.png - exists
3.png - exists
?.png - missing!!
2.png - exists
5.png - exists
?.png - missing!!
6.png …
Run Code Online (Sandbox Code Playgroud)

java encoding file

6
推荐指数
1
解决办法
1443
查看次数

为什么 ReverseDNS / getHostName() 对于某些地址来说超级慢?

我们在沙盒 Java Applet 中遇到问题,因为 SecurityManager 执行反向 DNS 查找。见其他问题

但潜在的问题是,反向 DNS 查找需要大约 4.5 秒(没有域结果)。问题不是丢失的结果(在这种情况下它返回 IP),只是它需要很长时间。

这个问题也与 SecurityManager 无关,它只会在那里成为一个问题,因为 Permissions 类在运行到这个时持有一个锁,因此冻结了许多其他线程 4.5(或更多)秒。

还有一些域没有域名结果(即返回 IP),不需要 4.5 秒。例如“staminus.net”。

SSCCE:

String host = "random.org";
// "random.org" - IP result, takes 4.5 seconds
// "cdn.knuddelscom.de" - IP result, takes 4.5 seconds
// "staminus.net" - IP result, fast
// "google.com" - domain result: fra15s11-in-f14.1e100.net, fast
InetAddress addr = Inet4Address.getByName(host);
for (int i = 0; i < 100; i++)
{
    long start = System.currentTimeMillis();
    String hostName …
Run Code Online (Sandbox Code Playgroud)

java timeout reverse-dns freeze

5
推荐指数
0
解决办法
1697
查看次数

标签 统计

java ×2

encoding ×1

file ×1

freeze ×1

reverse-dns ×1

timeout ×1