gpt4 book ai didi

java - 使用 .mov 文件到字节数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:15 27 4
gpt4 key购买 nike

我需要将文件转换为字节数组,但无法使用 .mov 文件 (1.32 Gb) 执行此操作。该方法适用于小型 .txt 文件和 JPEG 图像,但当我尝试使用 MOV 文件时却无法做到这一点。我刚刚得到一个 NullPointerException。

代码:

public byte[] fileToByteArray(File file){
ByteArrayOutputStream baos = null;
InputStream fis = null;
try{
byte[] buffer = new byte[(int)file.length()];
baos = new ByteArrayOutputStream();
fis = new FileInputStream(file);
int read;
while((read = fis.read(buffer)) != -1){
baos.write(buffer, 0, read);
}
}catch(Exception ex){
System.out.println("Error: 1");
}finally{
try{
if(baos != null){
baos.close();
}
}catch(Exception ex){
System.out.println("Error: 2");
}
try{
if(fis != null){
fis.close();
}
}catch(Exception ex){
System.out.println("Error: 3");
}
return baos.toByteArray();
}
}

最佳答案

在这一行中:

return baos.toByteArray();

无条件取消引用baos...即使如果此行抛出异常它仍然为空:

byte[] buffer = new byte[(int)file.length()];

我怀疑该行已经抛出了异常(内存不足,猜测)...但是由于您的异常处理策略是“捕获所有异常,打印出它们并忽略它们”,所以您在不应该继续的情况下继续进行。

对此问题的直接解决方法是只捕获您真正想要捕获的异常 - 在这种情况下,几乎肯定应该只是IOException如果有的话。事实上,我可能根本不会在您编写的代码中使用任何 catch 子句,除了可能在 close 代码中使用的子句。 (您不希望 close 中的异常掩盖其他地方的异常。如果您使用的是 Java 7,请使用 try-with-resources 语句以使所有这些更容易开始。)

以您正在做的方式“处理”异常是一个非常糟糕的主意 - 您基本上是在说,无论出了什么问题,您都想继续进行,如果您幸运的话,这只会导致一个错误导致另一个错误,或者如果您不幸的话,您最终会做出错误的状态更改,例如用坏数据覆盖好数据,甚至没有意识到。

现在,对于更大的问题 - 您正在尝试分配一个巨大的数组,并且我怀疑您没有告诉 JVM 使用那么多内存。您需要以如下内容开始:

java -Xmx3G ...

...假设您使用的是 64 位 JVM,它很乐意使用这么多内存。

关于java - 使用 .mov 文件到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com