我想将视频转换为它给我结果的字节,但我认为结果不正确,因为我测试了不同的视频,并给了我相同的结果所以 可以任何人帮忙请做如何将视频转换为字节
String filename = "D:/try.avi";
byte[] myByteArray = filename.getBytes();
for(int i = 0; i<myByteArray.length;i ++)
{
System.out.println(myByteArray[i]);
}
请帮忙吗?
答案 0 :(得分:4)
String filename = "D:/try.avi";
byte[] myByteArray = filename.getBytes();
即将文件名称转换为字节,而不是文件内容。
至于阅读文件内容,请参阅Java教程的Basic I/O课程。
答案 1 :(得分:2)
相同容器格式的视频以相同的字节开头。使用的编解码器确定实际的视频文件。
如果您计划开发视频应用程序,我建议您先阅读有关容器文件格式和编解码器的更多信息。
但是你有一个不同的问题。正如Andrew Thompson正确指出的那样,你得到了文件名字符串的字节。
正确的方法是:
private static File fl=new File("D:\video.avi");
byte[] myByteArray = getBytesFromFile(fl);
请注意,终端通常具有固定的缓冲区大小(在Windows上,它是几行),因此输出大量数据只会显示最后几行。
编辑:以下是getBytesFromFile的实现;一位java专家可能会提供更多标准方法。
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = openFile(file.getPath());
// Get the size of the file
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
Assert.assertExp(false);
logger.warn(file.getPath()+" is too big");
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// debug - init array
for (int i = 0; i < length; i++){
bytes[i] = 0x0;
}
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
答案 2 :(得分:-2)
如果您想阅读视频文件的内容,请使用File
。
String filename = "D:/try.avi";
File file=new File(filename);
byte myByteArray[]=new byte[(int)file.length()];
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.read(myByteArray);