【问题标题】:Converting from an ArrayList[x]byte[] to a byte[] with .toArray?使用 .toArray 从 ArrayList[x]byte[] 转换为 byte[]?
【发布时间】:2018-02-19 15:13:14
【问题描述】:

我有许多包含图像和视频的图形文件。我想将这些存储在 arrayList 中。大多数文件将是图像。只有一些会是短的低分辨率视频。

我已选择使用 byte[] 的 arrayList。以下代码旨在测试这些步骤。
我将图像文件加载到 ArrayList 中。 然后我尝试将随附的 byte[] 的副本写入文件。我之前已成功使用此命令将独立的 byte[] 写入文件,所以我知道它有效。

问题是我需要从 ArrayList 中读取整个字节数组作为数组。我不知道该怎么做。

我在 Java API 中找到了 .toArray 命令,但我不知道这种情况的语法。 API对我来说不是很清楚。 我试过了:

    byte[] b =  new byte[1000];
    ary[0].toArray(byte[] b);

    ary[0].toArray();

但我无法让它们工作。

package test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;

public class testArrayListByteCopy {

    public static void main(String[] args){
        System.out.println("Running Array of byte arrays copy test");

        ArrayList < byte[] > ary;  //define the  arrays

        //create an ArrayList with 3x byte[] arrays       
        ary = new ArrayList<byte[]>(3);  
        //load up one of them
        try {
        ary.add(Files.readAllBytes(Paths.get("/home/test1.png")));
        }
        catch (IOException e) {
            e.printStackTrace();
        }    

           // save byte[] into a file
            Path path = Paths.get("/home/testSave.png");
//          The next line fails.  The error message says array expected but arrayList byte[] found.  Illegal start of expression. 
            //Files.write(path, ary[0].toArray()  ,StandardOpenOption.CREATE);
// This line  works based on the answers below.
        Files.write(path, arrayTo.get(0),StandardOpenOption.CREATE);
                System.out.println("Done");
            } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

【问题讨论】:

  • 等等,你想在内存中存储视频?您知道实际需要多少空间吗?
  • 视频文件大小在 50kB 到 200kB 之间,因此将它们存储在内存中没有问题。

标签: java arrays arraylist type-conversion


【解决方案1】:

您应该写ary.get(0) 而不是ary[0].toArray(),因为ArrayList 类型不能用[] 下标。只有内置数组类型是 (T[])。

【讨论】:

  • 完美。我不知道要花多长时间才能找到这些信息。我刚刚在 Java T[ ] 上进行了搜索,并找到了泛型教程 docs.oracle.com/javase/tutorial/java/generics/types.html 但这似乎并未将 T[ ] 限制为内置数组类型。
  • 我所说的“内置数组”类型是[] 部分,也就是说任何Java 和自定义类都可以分组到其类型的数组中。 (例如:假设您有一个名为Foo 的类,那么您可以创建一个Foo[] 类型的数组并使用[ . ] 访问它,而ArrayList&lt;Foo&gt; 则无法做到这一点。
  • 另外,请务必接受答案,以便话题可以关闭:)
猜你喜欢
  • 2011-10-15
  • 2016-01-29
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2021-08-26
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多