泛型ArrayList集合转为数组?

finemi 2015-05-15 11:39:28
其实我只是想把List<Byte>转为 byte[] 数组而已。。。 结果java的奇葩语法再次让我震撼了。。。
首先我查到网上说要这样:

String[] strs = new String[bytess.size()];
strs = bytess.toArray(strs);

1.这是什么鬼语法。。我只想问那参数是干嘛的,泛型方法语法不是应该这样吗:对象.<类型>方法();
可是我要转byte呀!遂改之~ 结果编译报错!
2.原来不能转toArray()不能用于byte!这又是为什么?
...全文
689 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
O_森_O 2015-05-19
  • 打赏
  • 举报
回复
楼主基础知识还是太差,那个语法从表面上看确实很奇葩,但是那却是必须的无奈只举,因为java的范型是运行时擦除的,所以Byte运行时都转为Object了,而java的数组是有运行时信息的,所以综上所述,toArray 方法,java要做的事情是把一个无类型信息的Object 数组转换为有类型信息的数组,而这个类型只能通过方法调用者来指定。
bree06 2015-05-19
  • 打赏
  • 举报
回复
写了个合并文件的例子,可以参照一下,合并文件的类型最好一致.
    /**
     * 取工程根目录下所有txt文件进行合并
     */
    public void collectionFiles() {
        // 取工程根目录下所有txt文件
        String[] fileNames = new File("./").list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return "txt".equals(name.substring(name.indexOf(".") + 1).toLowerCase());
            }
        });

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(this.getClass().getName() + ".connection.txt");
            for (int i = 0, len = fileNames.length; i < len; i++) {
                File f = new File("./" + fileNames[i]);
                String title = "\r\n------------" + fileNames[i] + "------------\r\n";
                fos.write(title.getBytes("utf8"));
                FileInputStream fis = new FileInputStream(f);
                byte[] bs = new byte[1 << 11];
                int length = 0;
                while ((length = fis.read(bs)) > -1) {
                    fos.write(bs, 0, length);
                }
                fos.flush();
                fis.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
bree06 2015-05-19
  • 打赏
  • 举报
回复
集合类都是操作对象的,所以只能用byte的封装类Byte。 toArray(T[] a)带参数是为了类型强转,转为你想要的类型,不然就直接返回Object[] 数组。
    public static void main(String[] args) {
        List<Byte> list = new ArrayList<Byte>();
        list.add((byte)'0');
        list.add((byte)'1');
        list.add((byte)'2');
        list.add((byte)'3');
        list.add((byte)'4');

        Byte[] bs = new Byte[list.size()];
        list.toArray(bs);
        // debug
        System.out.println(Arrays.toString(bs));

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(new File(Demo05.class.getName() + ".txt"));
            for (int i = 0; i < bs.length; i++)
            fos.write(bs[i]);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        try {
            if (fos != null)
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
    }
当然你可以自己写一个ByteArray类来处理基本类型byte。 还有你可以边读边写呀,没有必要把所有东西读到内存再写文件,这样就可以不借助集合类。
铁匠梁老师 2015-05-18
  • 打赏
  • 举报
回复
javadoc是个好帮手
scmod 2015-05-17
  • 打赏
  • 举报
回复
合并文件好像cmd下面copy命令就行了 或者BufferedReader跟PrintWriter之类的 这个感觉边读边写比较方便 不然多个文件全部放数组再放list里面感觉略麻烦
scott_129 2015-05-16
  • 打赏
  • 举报
回复
javaAPI 里面List有是有讲到的public <T> T[] toArray(T[] a)
使用List对象去访问toArray方法,toArray方法的参数就是你需要转化成的数组类型,
你这里就传new Byte[xx]。
JPF1024 2015-05-16
  • 打赏
  • 举报
回复
参考,使用java 8

import java.util.ArrayList;
import java.util.List;
/**
 * List转数组 -- Java 8
 * <p>
 * <p>
 * <p>
 * Created by puruidong on 2015/05/16.
 */
public class Main {
    public static void main(String[] args) {
        List<Byte> bys = new ArrayList<Byte>();
        bys.add(new Byte("1"));
        bys.add(new Byte("2"));
        bys.add(new Byte("3"));
        bys.add(new Byte("4"));
        bys.add(new Byte("5"));
        System.out.println("转换之前遍历:");
        bys.forEach((x)->{
            System.out.println(x);});
        Byte[] basarray = bys.toArray(new Byte[bys.size()]);
        System.out.println("-----------------------\n转换后[输出byte数组]:");
        for (int i = 0; i < basarray.length; i++) {
            System.out.println(basarray[i]);
        }

    }
}
suciver 2015-05-16
  • 打赏
  • 举报
回复
既然只是文本文件合并,用字符流边读边写就行了
finemi 2015-05-15
  • 打赏
  • 举报
回复
最后我其实只是想合并几个文件而已- -

List<Byte> bytess = new ArrayList<Byte>();
 for(int i = 1;i <= 6;i++){
		 FileInputStream fis = new FileInputStream(dirpath+i+".txt");
		 bytess.add((byte) fis.read());
		 fis.close();
 }
//最后bytess写不出了。。。。 输出流都要数组。。。。
最后bytess写不出了。。。。 输出流都要数组。。。。 本来不想用集合的,直接用数组,结果输入流又不能一次性读完- -。。。 要读完也可以- - ,结果发现又要设计数组合并,发现合并java api又没有提供方法还要用循环。。。。 java写个小代码简直累死。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧