Java 数组合并后的结果不相等

Java 数组合并后的结果不相等,java,arrays,bytearrayoutputstream,Java,Arrays,Bytearrayoutputstream,我试图将多个byte[]数组连接成一个大数组。我发现了一个利用ByteArrayOutputStream的解决方案,但我发现结果很奇怪 代码 但输出表单getRaw()方法只包含来自{-1,1,0,2}的值。两个输出具有相同的大小(os.toByteArray().length==list.size*(…)getSamples.lenght)。我做错了什么?如何正确合并这些阵列?在第一种情况下,您将立即处理样本卡盘。在第二种情况下,存储块缓冲区并在所有读取完成后处理它们。如果重用了xugleau

我试图将多个byte[]数组连接成一个大数组。我发现了一个利用ByteArrayOutputStream的解决方案,但我发现结果很奇怪

代码


但输出表单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 ...