将byte数组中的数据循环放在另外一个数组中

将byte数组中的数据循环放在另外一个数组中,第1张

public static void main(String[] args) {
  List l = new ArrayList();
  byte[]a={1,2,3,4,5,6,7};
  byte[]b=new byte[4];
  int c = 0;
  for(int i=0;i<alength;i++){
   if(i!=0&&i%4==0){
    ladd(b);
    b=new byte[4];
    c=0;
   }
   b[c]=a[i];
   if(i==alength-1){
    ladd(b);
   }
   c++;
  }
  for(int i=0;i<lsize();i++){
   byte[]bb = (byte[]) lget(i);
   for(int y=0;y<bblength;y++){
    Systemoutprint(bb[y]);
   }
   Systemoutprintln("--------");
  }
 }

没法加了,运行结果是

1234--------
5670--------

因为数组定义长度为4,所以第二个数组最后一个不够默认补0,实现了4个一组存在一个集合里,至于调用方法没明白楼主说的

[]这种形式的数组是固定长度,不能改变数组大小的
你要连接,只能用ArrayList或泛型了
byte[] b1=new byte[256];
byte[] b2=new byte[256];
List<byte> b3 = new List<byte>();
b3AddRange(b1);
b3AddRange(b2);
此时b3的大小就是512了,如果你想要byte[],就用b3ToArray()方法

可能原因:
1、传入的参数是超出byte范围的,byte类型的取值范围是-128到127,如果传入的值超出了这个范围,就会出现数据类型溢出,导致编译错误或者运行时错误。
2、输入的参数类型不是byte类型,如果传入的参数是整型或其他数据类型,需要强制类型转换为byte类型之后再使用,否则也会报错。

这个实质是内存内容复制的问题,最简单的方法是调用系统的memcpy函数。

函数原型如下:

void memcpy(void dest, const void src, size_t n);

2功能

从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

3所需头文件

C语言:#include<stringh>

C++:#include<cstringh>

4返回值

函数返回指向dest的指针。

File f= new File(path);
RandomAccessFile reader = new RandomAccessFile(f, "r");
boolean b = true;//用来标记是否独到文件尾
while(b){
byte[] b = new byte[5];
int flag = 0;
try{
flag = readerread(b); //每次读取blength字节,并且将读出来的自己放入b中,flag指的是读出来的字节数,如果没有读出数据,就是-1;
}catch(IOExceptione){
eprintStackTrace();
}
if(0<flag<6){ //控制结尾
for(int i=0;i<blength;i++){
Systemoutprint(b[i]);
}
}else{
b = false
}

}
没测试过,不过应该没什么大问题,自己稍微改下就OK了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13405413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存