FindBugs报告一个错误:
依赖默认编码找到了对将执行字节到字符串(或字符串到字节)转换的方法的调用,并假定默认平台编码是合适的。这将导致应用程序行为在平台之间有所不同。使用备用API并明确指定字符集名称或字符集对象。
我像这样使用FileReader(仅是一段代码):
public ArrayList<String> getValuesFromFile(File file){
String line;
StringTokenizer token;
ArrayList<String> list = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
list = new ArrayList<String>();
while ((line = br.readLine())!=null){
token = new StringTokenizer(line);
token.nextToken();
list.add(token.nextToken());
...
要更正错误,我需要更改
br = new BufferedReader(new FileReader(file));
至
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.defaultCharset()));
当我使用PrintWriter时,发生了相同的错误。所以现在我有一个问题。什么时候可以(应该)使用FileReader和PrintWriter,如果不是一个好的习惯,请依靠默认编码?第二个问题是正确使用Charset.defaultCharset()吗?我决定使用此方法自动定义用户操作系统的字符集。
如果文件在应用程序的控制下,并且希望以平台的默认编码对文件进行编码,则可以使用默认的平台编码。明确指定它对于您和以后的维护者来说,这是您的意图。例如,对于文本编辑器来说,这将是一个合理的默认设置,它将随后编写该平台上任何其他编辑器都能够读取的文件。
另一方面,如果要确保可以在文件中写入任何可能的字符,则应使用通用编码,例如UTF8。
并且,如果文件来自外部应用程序,或者应该与外部应用程序兼容,那么您应该使用该外部应用程序期望的编码。
您必须意识到的是,如果您像在计算机上一样编写文件,然后在另一台计算机上读取文件,而该文件没有相同的默认编码,那么您不一定能够阅读您所写的内容。像UTF8一样,使用特定的编码进行写入和读取,以确保无论写入文件时使用何种平台,文件都将始终相同。
问题内容: 为什么我应该(或不应该)将gradle依赖项包含为, 有什么好处/缺点? 如您所见,我在支持它的下面的库中添加了@aar。但是一切似乎都还没有做完… 问题答案: 在大多数情况下,您可以使用或上载多种格式的库。 如果不指定后缀,则将以其默认格式(由作者定义,如果不是,则以默认格式)以及所有依赖项下载该库。 指定后缀时,将强制以指定的格式(可能存在或可能不存在)下载库。这很有用,例如当作者
问题内容: 之间有什么区别: 和 我知道JPanel是GUI组件的容器,但我确实看不到使用它的实用程序。当然,我错了,但我是从Swing开始的,所以…为什么我应该使用JPanel?真正的目的是什么? 问题答案: 为什么我应该使用JPanel? 您可以使用JPanel获得以下一项或多项好处: 将组件分组在一起。 为了更好地组织您的组件。 为了使我们能够使用 多种布局 并组合其效果。(例如,用于数字键
问题内容: UTF-8是Java中的默认编码吗? 如果没有,我怎么知道默认使用哪种编码? 问题答案: JVM的默认字符集是运行它的系统的默认字符集。对此没有特定的值,并且通常不应将默认编码视为任何特定的值。 可以在运行时通过对其进行访问,尽管这对你有用,但实际上你应该始终在明确指定编码的情况下这样做。
问题内容: 为什么以及何时应该在php中使用该函数?使用后是否应该始终使用它?我读到我必须使用它来防止会话固定,这是唯一原因吗? 问题答案: 什么啊 就像函数名称所说的那样,它是一个函数,它将用新的ID替换当前的会话ID,并保留当前的会话信息。 它有什么作用? 它主要有助于防止会话固定攻击。会话固定攻击是恶意用户试图利用系统中的漏洞固定(设置)另一个用户的会话ID(SID)的地方。这样,他们将拥有
为什幺应该使用流 在node中,I/O都是异步的,所以在和硬盘以及网络的交互过程中会涉及到传递回调函数的过程。你之前可能会写出这样的代码: var http = require('http'); var fs = require('fs'); var server = http.createServer(function (req, res) { fs.readFile(__dirname
我的老师让我这样做,但在评论区我被告知我不应该这样做。 为什么?