其实我只是想把List<Byte>转为 byte[] 数组而已。。。 结果java的奇葩语法再次让我震撼了。。。
首先我查到网上说要这样:
String[] strs = new String[bytess.size()];
strs = bytess.toArray(strs);
1.这是什么鬼语法。。我只想问那参数是干嘛的,泛型方法语法不是应该这样吗:对象.<类型>方法();
可是我要转byte呀!遂改之~ 结果编译报错!
2.原来不能转toArray()不能用于byte!这又是为什么?
------解决思路----------------------
既然只是文本文件合并,用字符流边读边写就行了
------解决思路----------------------
参考,使用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]);
}
}
}
------解决思路----------------------
javaAPI 里面List有是有讲到的public <T> T[] toArray(T[] a)
使用List对象去访问toArray方法,toArray方法的参数就是你需要转化成的数组类型,
你这里就传new Byte[xx]。
------解决思路----------------------
合并文件好像cmd下面copy命令就行了
或者BufferedReader跟PrintWriter之类的
这个感觉边读边写比较方便
不然多个文件全部放数组再放list里面感觉略麻烦
------解决思路----------------------
楼主基础知识还是太差,那个语法从表面上看确实很奇葩,但是那却是必须的无奈只举,因为java的范型是运行时擦除的,所以Byte运行时都转为Object了,而java的数组是有运行时信息的,所以综上所述,toArray 方法,java要做的事情是把一个无类型信息的Object 数组转换为有类型信息的数组,而这个类型只能通过方法调用者来指定。
------解决思路----------------------
集合类都是操作对象的,所以只能用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。
还有你可以边读边写呀,没有必要把所有东西读到内存再写文件,这样就可以不借助集合类。