- Reliance on default encoding
- 流操作要确定编码格式
- 标准
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path + item), "UTF-8"));
不使用FileReader in = new FileReader(file);而是改用
InputStreamReader sss = new InputStreamReader(new FileInputStream(file), "utf-8");
filereader 默认没有编码指定,而使用默认方式。
- Method ignores results of InputStream.skip()
- InputStream.skip()方法忽略返回的多个字符,如果对结果没有检查就没法正确处理用户跳过少量字符请求的情况
- Result of integer multiplication cast to long
- Dodgy Code
- 标准
long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; }
整数相乘,要显示标注L
- 分析
为什么编译器不能自动识别呢?答案是:很麻烦,并且这会使用编译器的效率非常低!对于有汇编经验的人来说,应该了解用汇编实现动态判断一个结果应该分配到一个long的空间还是int的空间有多复杂吧,而编译器有不能随便随便把int * int 的结果分配一个long空间,因为这会非常浪费内存,所以出于对效率和资源的考虑,最后的决定就是,凡是int * int * ....这样的计算结果一律都存放到int空间里,如果是long * int * .....则一律存放到long空间里,这就解释了为什么上面要在1000后面加个"L"了。
- WMI_WRONG_MAP_ITERATOR
- 标准
for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {
mb.add(entry.getValue());
}
- 分析
map的遍历,采用entry的方式,效率更高;尤其对大数量的map;
不要使用先keyset后查value的方式
网友评论