系统会不会自动缓存资源文件

zhongyj2004 2010-12-08 06:14:38
有下面一段代码
ResourceBundle rs= ResourceBundle.getBundle("AAResources", Locale.US);
rs.getString("key");

ResourceBundle rs= ResourceBundle.getBundle("AAResources", Locale.US); // 第四行
rs.getString("key");


1:第一次执行 ResourceBundle.getBundle的时候,java是把这个文件一次全都读到内存里面吗。
2:第二次重复执行getBundle getString的时候,java会不会先看一下文件是不是修改了,如果修改了才读文件,否则自动从内存中取。不会再从文件读。
3:如果去掉第四行,有什么区别吗。
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jlins 2010-12-17
  • 打赏
  • 举报
回复
1、读取之后保存在Map中下次在读取直接从内存返回
2、 会不会检查文件更新
视情况而定,ResourceBundle使用缓存。当缓存有效时,直接从内存中返回,因此不会检查更新。如果缓存过 期,则会重新加载。
3、没有区别
zk77zyy 2010-12-17
  • 打赏
  • 举报
回复
另外这个ResourceBundle是个抽象类 关键的处理方法都是抽象的

上述所说只是默认实现

不同的实现类或许会有不同.
sound9world 2010-12-08
  • 打赏
  • 举报
回复
另外这个ResourceBundle是个抽象类 关键的处理方法都是抽象的

上述所说只是默认实现

不同的实现类或许会有不同.
sound9world 2010-12-08
  • 打赏
  • 举报
回复
默认的实现不会检查文件更新 都应该算是静态读取 除非程序重新运行 不然只读取一次

总检查更新从硬盘读取的话 就没必要存在内存了 反正每次都会检查硬盘.

第四行就是多调用来一次getBundleImpl,程序会检查到缓存中缓存了该cache key的bundle

从而将该bundle直接返回了(如果还有效的话)。
水中影子 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 icy_csdn 的回复:]

2. 会不会检查文件更新
视情况而定,ResourceBundle使用缓存。当缓存有效时,直接从内存中返回,因此不会检查更新。如果缓存过期,则会重新加载。
3. 有区别么
严格上来说会有区别,因为在执行ResourceBundle.getBundle时,会检索是否为过期,如果过期则重新加载。
[/Quote]

顶!
sound9world 2010-12-08
  • 打赏
  • 举报
回复
jdk的默认ResourceBundle的实现类 PropertyResourceBundle是用Properties一次将文件读进内存的,最后存储在Map中.

icy_csdn 2010-12-08
  • 打赏
  • 举报
回复
2. 会不会检查文件更新
视情况而定,ResourceBundle使用缓存。当缓存有效时,直接从内存中返回,因此不会检查更新。如果缓存过期,则会重新加载。
3. 有区别么
严格上来说会有区别,因为在执行ResourceBundle.getBundle时,会检索是否为过期,如果过期则重新加载。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧