我读了很多关于EBADF的帖子,但没有一个能解决我的问题。
所以我正在做的是将。jpg格式转换为字节最后我想把字节写入二进制文件。
这是我的代码。
public static void writeBytes(byte[] bytes,String dstPath){
FileOutputStream fout = null;
BufferedOutputStream bout = null;
try {
fout = new FileOutputStream(dstPath);
bout = new BufferedOutputStream(fout);
bout.write(bytes);
} catch (IOException io) {
} finally {
try {
if (fout != null)
fout.close();
if (bout != null)
bout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
问题发生在调用布特。write(bytes)时。
我想我找到问题了。
(BufferedOutputStream)中的缓冲区大小默认为8192,而我的字节大小小于它。所以我像下面这样修改代码。
public static void writeBytes(byte[] bytes,String dstPath){
FileOutputStream fout = null;
BufferedOutputStream bout = null;
int bufferSize = 8192;
if(bytes.length < bufferSize){
bufferSize = bytes.length;
}
try{
fout=new FileOutputStream(dstPath);
bout=new BufferedOutputStream(fout,bufferSize);
bout.write(bytes);
}catch (IOException io){
}finally {
try {
fout.close();
bout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
i设置缓冲区大小等于这个条件的字节大小。
int bufferSize = 8192;
if(bytes.length < bufferSize){
bufferSize = bytes.length;
}
并设置缓冲区大小为BufferedOutputStream
bout=new BufferedOutputStream(fout,bufferSize);
我不确定这是标准的方式,但对我来说是有效的。