Java 数组合并后的结果不相等
我试图将多个byte[]数组连接成一个大数组。我发现了一个利用ByteArrayOutputStream的解决方案,但我发现结果很奇怪 代码Java 数组合并后的结果不相等,java,arrays,bytearrayoutputstream,Java,Arrays,Bytearrayoutputstream,我试图将多个byte[]数组连接成一个大数组。我发现了一个利用ByteArrayOutputStream的解决方案,但我发现结果很奇怪 代码 但输出表单getRaw()方法只包含来自{-1,1,0,2}的值。两个输出具有相同的大小(os.toByteArray().length==list.size*(…)getSamples.lenght)。我做错了什么?如何正确合并这些阵列?在第一种情况下,您将立即处理样本卡盘。在第二种情况下,存储块缓冲区并在所有读取完成后处理它们。如果重用了xugleau
但输出表单getRaw()方法只包含来自{-1,1,0,2}的值。两个输出具有相同的大小(os.toByteArray().length==list.size*(…)getSamples.lenght)。我做错了什么?如何正确合并这些阵列?在第一种情况下,您将立即处理样本卡盘。在第二种情况下,存储块缓冲区并在所有读取完成后处理它们。如果重用了
xugleaudio
缓冲区的内部,该怎么办?第50个缓冲区对象可能会重用第一个缓冲区对象的内部存储,因为那是整整一秒钟前的事了,没有必要保留数据或分配更多内存。getRaw()
输出是否看起来像init()
输出的结尾?确定。我把chunkList改为List,效果很好。非常感谢您在第一个案例中,您将立即处理样品卡盘。在第二种情况下,存储块缓冲区并在所有读取完成后处理它们。如果重用了xugleaudio
缓冲区的内部,该怎么办?第50个缓冲区对象可能会重用第一个缓冲区对象的内部存储,因为那是整整一秒钟前的事了,没有必要保留数据或分配更多内存。getRaw()
输出是否看起来像init()
输出的结尾?确定。我把chunkList改为List,效果很好。非常感谢你
List<SampleChunk> chunkList = new ArrayList<SampleChunk>();
public static byte[] getRaw(List<SampleChunk> list) throws FileNotFoundException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
for (int i = 0; i < list.size(); i++) {
try {
os.write(list.get(i).getSamples());
} catch (IOException e) {
e.printStackTrace();
}
}
PrintWriter pr = new PrintWriter(new File("all.txt"));
pr.write(Arrays.toString(os.toByteArray()));
pr.close();
return os.toByteArray();
}
public void init(){
XuggleAudio xa = new XuggleAudio(new File("in.flv"));
PrintWriter pr = new PrintWriter(new File("chunks.txt"));
int count = 0;
SampleChunk sc = null;
while ((sc = xa.nextSampleChunk()) != null) {
pr.write(count++ + " " + Arrays.toString(sc.getSamples()) + "\n");
chunkList.add(sc);
}
getRaw(chunkList);
}
0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2 [45, -1, -78, -4, 48, -1, -63, -4, 86,
3 [-38, -1, -55, -1, -62, -1, 85
4 ...