关于方法返回值的问题! 在主调函数中不要用书组,用可以变长的,如LinkedList 或者 ArrayList 然后作为参数传递 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在被调用的方法中a.add(b);其中a是ArrayList的对象,b是方法中得到的结果数组,这条语句是否就已经把数组b中的元素加入到a中去了??? ArrayList本身就是一个动态变长的数组。另外你不能把一个普通数组一下子放到ArrayList里面。可以用一个循环,遍历普通数组,一个一个添加到ArrayList里面 好像用add方法添加数组元素有问题,JBuilder报错了:cannot resolve symbol:method add(byte)in class...... byte是基本类型,而ArrayList是要加对象的,new Byte(b) 楼上的你所指的new Byte(b)中的b是数组呢,还是数组元素?可否把数组一次用add方法添加到ArrayList中去???? 可否把数组一次用add方法添加到ArrayList中去????如果是普通数组:那就不可以。 但是我把数组名作为参数放到add方法中去,并没有报错是为什么? 没有报错,是因为数组本身就是Object,而ArrayList添加的本身就是Object,这就是语言本身不太好的地方,sun一直吹嘘说,把错误尽可能的在编译期发现。不过,最新的jdk1.5中的范型编程可以很好的解决这个问题。你把你的程序那出来,给你改改把 这就是那个进行文件分解的方法://对单个png文件进行分解; void getIdatAndPlte(File pngFile, ArrayList headerAndIdat, ArrayList plte) { RandomAccessFile is = null; ByteArrayOutputStream bHeaderAndData = new ByteArrayOutputStream(); ByteArrayOutputStream bPlte = new ByteArrayOutputStream(); byte[] fileSignature = new byte[8]; //存放png头部8个字节的签名域; byte[] header = new byte[3]; String chunkType = ""; int chunkLength = 0; String str = ""; //结果提示; try { is = new RandomAccessFile(pngFile, "r"); is.seek(0); if (fileSignature[0] == -119 && fileSignature[1] == 80 && fileSignature[2] == 78 && fileSignature[3] == 71 && fileSignature[4] == 13 && fileSignature[5] == 10 && fileSignature[6] == 26 && fileSignature[7] == 10) { is.skipBytes(8); //跳过头数据块的长度和类型共8个字节; header[1] = (byte) is.readInt(); //宽度; header[2] = (byte) is.readInt(); //高度; header[0] = (byte) is.readByte(); //色深; bHeaderAndData.write(header); //写入文件头信息; for (; ; ) { chunkLength = is.readInt(); for (int i = 0; i < 4; i++) { chunkType += (char) is.readByte(); } //获得数据块的类型码; if (chunkType.compareTo("IDAT") == 0) { byte[] chunkData = new byte[chunkLength]; is.read(chunkData, 0, chunkLength); bHeaderAndData.write(chunkData); //将数据块数据写入字节数组; bHeaderAndData.flush(); is.skipBytes(4); } else if (chunkType.compareTo("PLTE") == 0) { byte[] plteData = new byte[chunkLength]; is.read(plteData, 0, chunkLength); bPlte.write(plteData); bPlte.flush(); is.skipBytes(4); } else { is.skipBytes(chunkLength + 4); //跳过本数据块; } if (chunkType.compareTo("IEND") == 0) { break; } } //下面这两个for循环就是按照你说的那样遍历插入! byte[] temp = bHeaderAndData.toByteArray(); for (int i = 0; i < temp.length; i++) { headerAndIdat.add(new Byte(temp[i])); } temp = bHeaderAndData.toByteArray(); for (int j = 0; j < temp.length; j++) { plte.add(new Byte(temp[j])); } str = pngFile + "文件分解成功"; Frame1.mainFrame.setLable(str); } else { str = pngFile + "不是png文件"; Frame1.mainFrame.setLable(str); } } catch (IOException e) {} finally { try { is.close(); //关闭文件输入流; bHeaderAndData.close(); //关闭文件头和数据块字节数组流 bPlte.close(); //关闭调色板字节数组流; } catch (IOException e) {} } } headerAndIdat.add(new Byte(temp[i]));这样是正确的。假设是这样的:main(){ ArrayList al1=new ArrayList(); ArrayList al2=new ArrayList(); getIdatAndPlte(pngFile, al1, al2); //上面的函数调用完了后,al1,al2中就有你要的数据了。 for(int i=0;i<al1.size();i++) { byte b=(Byte)al1.get(i).valueOf(); } 谢谢楼上的,不过这个好像有问题:byte b=(Byte)al1.get(i).valueOf();其中的b应该是数组类型吧?是否是:b[i]=(Byte)al1.get(i).valueOf();? 谢谢楼上的,不过这个好像有问题:byte b=(Byte)al1.get(i).valueOf();其中的b应该是数组类型吧?是否是:b[i]=(Byte)al1.get(i).valueOf();?关于b是什么,看你的需要了.你的问题解决了吗? 按照你提示的方法应该算解决了,谢谢了!另外问你一个问题:file是一个文件夹,File files[] =file.listFiles();那么files数组中包含的文件是以什么方式排列的?以名字? public String[] list()There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.这是官方文档的标准解释。 byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......该如何处理? byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?可能有问题,我直接回复的,没有调试。:)关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......该如何处理?Collections.sort(list);应该是这个 byte b=(Byte)al1.get(i).valueOf();这条语句好像有问题,后面那个valueOf()好像没有这个方法呢?可能有问题,我直接回复的,没有调试。:)byte b=((Byte)al1.get(i)).valueOf(); 现在问题是在主调方法中如何通过ArrayList获得其包含的数组元素!因为你这条语句有错:byte b=((Byte)al1.get(i)).valueOf();不知道正确的该如何实现! 在主调方法中,我这样实现对ArrayList中的数组元素进行读取如何: temgetdata=new byte[hAndIdata.size()]; for (int k = 0; k < hAndIdata.size(); k++) { //hAndIdata是ArrayList对象 temgetdata[k] = Byte.parseByte(hAndIdata.get(k).toString()) ; } 个人决得这条语句不是很好:temgetdata[k] = Byte.parseByte(hAndIdata.get(k).toString()) ;各位可有更地道一点的??? 正则表达式 怎样导出jar包 请求帮忙写二维数组保存到文件的函数和二维数组读取函数 用VJ++调试Applet时,在断点居然不停!!!!! 求救!getAbsolutePath()真是害人啊! 如何对一批文件名排序? 类定义的问题!! 请推荐几本书!!!!!!!!!谢谢! 我的朋友在加拿大,说流行用JAVA... java 线程问题,求指导 大家帮帮忙,我是新手,问一下关于配置文件的问题 eclipse怎么配置javac的编码??encoding 象jb一样的??
可以用一个循环,遍历普通数组,一个一个添加到ArrayList里面
如果是普通数组:那就不可以。
你把你的程序那出来,给你改改把
//对单个png文件进行分解;
void getIdatAndPlte(File pngFile, ArrayList headerAndIdat, ArrayList plte) {
RandomAccessFile is = null;
ByteArrayOutputStream bHeaderAndData = new ByteArrayOutputStream();
ByteArrayOutputStream bPlte = new ByteArrayOutputStream();
byte[] fileSignature = new byte[8]; //存放png头部8个字节的签名域;
byte[] header = new byte[3];
String chunkType = "";
int chunkLength = 0;
String str = ""; //结果提示;
try {
is = new RandomAccessFile(pngFile, "r");
is.seek(0);
if (fileSignature[0] == -119 && fileSignature[1] == 80 &&
fileSignature[2] == 78 && fileSignature[3] == 71 &&
fileSignature[4] == 13 && fileSignature[5] == 10 &&
fileSignature[6] == 26 && fileSignature[7] == 10) {
is.skipBytes(8); //跳过头数据块的长度和类型共8个字节;
header[1] = (byte) is.readInt(); //宽度;
header[2] = (byte) is.readInt(); //高度;
header[0] = (byte) is.readByte(); //色深;
bHeaderAndData.write(header); //写入文件头信息;
for (; ; ) {
chunkLength = is.readInt();
for (int i = 0; i < 4; i++) {
chunkType += (char) is.readByte();
} //获得数据块的类型码;
if (chunkType.compareTo("IDAT") == 0) {
byte[] chunkData = new byte[chunkLength];
is.read(chunkData, 0, chunkLength);
bHeaderAndData.write(chunkData); //将数据块数据写入字节数组;
bHeaderAndData.flush();
is.skipBytes(4);
}
else if (chunkType.compareTo("PLTE") == 0) {
byte[] plteData = new byte[chunkLength];
is.read(plteData, 0, chunkLength);
bPlte.write(plteData);
bPlte.flush();
is.skipBytes(4);
}
else {
is.skipBytes(chunkLength + 4); //跳过本数据块;
}
if (chunkType.compareTo("IEND") == 0) {
break;
}
} //下面这两个for循环就是按照你说的那样遍历插入!
byte[] temp = bHeaderAndData.toByteArray();
for (int i = 0; i < temp.length; i++) {
headerAndIdat.add(new Byte(temp[i]));
}
temp = bHeaderAndData.toByteArray();
for (int j = 0; j < temp.length; j++) {
plte.add(new Byte(temp[j]));
} str = pngFile + "文件分解成功";
Frame1.mainFrame.setLable(str); }
else {
str = pngFile + "不是png文件";
Frame1.mainFrame.setLable(str);
} }
catch (IOException e) {}
finally {
try {
is.close(); //关闭文件输入流;
bHeaderAndData.close(); //关闭文件头和数据块字节数组流
bPlte.close(); //关闭调色板字节数组流; }
catch (IOException e) {}
} }
这样是正确的。
假设是这样的:
main()
{
ArrayList al1=new ArrayList();
ArrayList al2=new ArrayList();
getIdatAndPlte(pngFile, al1, al2);
//上面的函数调用完了后,al1,al2中就有你要的数据了。
for(int i=0;i<al1.size();i++)
{
byte b=(Byte)al1.get(i).valueOf();
}
是否是:b[i]=(Byte)al1.get(i).valueOf();?
是否是:b[i]=(Byte)al1.get(i).valueOf();?关于b是什么,看你的需要了.
你的问题解决了吗?
另外问你一个问题:file是一个文件夹,File files[] =file.listFiles();那么files数组中包含的文件是以什么方式排列的?以名字?
There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.
这是官方文档的标准解释。
关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......
该如何处理?
可能有问题,我直接回复的,没有调试。:)
关于那个文件顺序的问题,我如果想按照一定的顺序排列,比如:000.png,001.png,002.png......
该如何处理?
Collections.sort(list);
应该是这个
可能有问题,我直接回复的,没有调试。:)byte b=((Byte)al1.get(i)).valueOf();
因为你这条语句有错:byte b=((Byte)al1.get(i)).valueOf();不知道正确的该如何实现!
temgetdata=new byte[hAndIdata.size()];
for (int k = 0; k < hAndIdata.size(); k++) { //hAndIdata是ArrayList对象
temgetdata[k] = Byte.parseByte(hAndIdata.get(k).toString()) ;
}
各位可有更地道一点的???