如果我只有一个,有人可以解释我如何获取文件对象ByteArrayOutputStream.如何从ByteArrayOutputStream?创建文件?
在Java中,有一个等同于C#"using"语句,允许为对象定义范围:
using (AwesomeClass hooray = new AwesomeClass())
{
// Great code
}
Run Code Online (Sandbox Code Playgroud) 从历史上看,我总是编写我的异常处理代码,如下所示:
Cursor cursor = null;
try {
cursor = db.openCursor(null, null);
// do stuff
} finally {
if (cursor != null) cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
但最近,出于可读性和懒惰的原因,我已经开始这样做了:
Cursor cursor = db.openCursor(null, null);
try {
// do stuff
} finally {
cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
从try-catch-finally块中分配游标(jdbc句柄,无论如何)是错误的吗?
除非JVM真正炸毁了作业,或者在作业块中的任务和第一行之间,我不确定我的旧样式是否会提供任何额外的价值,第二行肯定更具可读性和简洁性.文献通常总是采用第一种风格.
编辑 -假设我很高兴,同时初始化光标不是在这个代码块被抓,我在这个例子中唯一关心的是关闭游标,如果它通过openCursor抛出的异常的分配和打开.还假设我正在测试空值等等.. yadda ... yadda ...(我已经改变了示例来反映这一点,它不是我的问题的焦点,所以我没有将它包含在第一版)
我编写了以下程序来计算Java中字符串的SHA-256哈希值:
public class ToHash {
public static void main(String[] args) {
byte[] data = "test".getBytes("UTF8");
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(data);
System.out.println(new BASE64Encoder().encode(hash));
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,这很好.在下一步中,我想以接受文件并计算其哈希值的方式开发它.我的解决方案是在字符串数组中读取整个文件,并在该字符串数组上调用该digest()方法.但是有两个问题:
我不知道如何将整个文件读入数组?目前我认为我必须逐行阅读并附加一个带有新行的数组!
以上方法需要大量文件的大量内存!
这是我当前读取文件的程序:
public class ToHash {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, FileNotFoundException, IOException {
// TODO code application logic here
// The name of the file to open.
String fileName = "C:\\Users\\ghasemi\\Desktop\\1.png";
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName));
while …Run Code Online (Sandbox Code Playgroud)