package com.digican.ztest;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
/**
* 数组自动扩容;在实际的socket通讯中经常会用到数组自动增加
* @author yaodaqing
*
*/
public class TestByte {
private static final int BUFFER_SIZE = 512;
public static void main(String[] args) {
try {
DataInputStream dis = new DataInputStream(new FileInputStream(new File("d:/abc.txt")));
byte[] b = new byte[BUFFER_SIZE];
int i = 0;
int t = 0;
while((i = dis.read()) != -1){
//开始:数组自动扩容
if(t==b.length){
byte[] temp = new byte[t+1];
System.arraycopy(b, 0, temp, 0, b.length);
b = temp;
temp = null;
}
b[t] = (byte)i;
t++;
//结束
//此处是处理b的程序。。。
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
自动扩容 在添加元素时判断是空间已填满 若填满则按照原由的data.length()的两倍进行扩容 扩容原理: 生成新的data数组 将原由的data数组赋值到新的的扩容数组中(遍历赋值存在效率问题) data引用新的数组 原由的数组...
- **数组扩容**:利用`Arrays.copyOf()`方法实现数组的扩容,只需要设置`newLength`大于源数组的长度即可。 - **数组的数据类型** - 基本类型(byte, short, int, long, double, float, char, boolean) - 引用...
**集合扩容原理**通常与ArrayList和LinkedList等实现有关,它们会在容量不足时自动增加容量,这涉及到元素的复制和新容量的计算。 **哈希表(HashMap)**是一种基于哈希函数的数据结构,提供了快速的插入、查找和...
例如,初始容量为10,第一次扩容后变为15,第二次扩容后变为22,以此类推。 在Java中,异常处理是必不可少的一部分。例如,`NoSuchFieldException`表示尝试访问的字段不存在,`NullPointerException`表示空指针引用...
当内部数组容量不足时,会自动扩容。扩容策略通常是将容量翻倍。 2. **JVM 启动参数**:-verbose、-Xms、-Xmx 是常见的JVM参数。-verbose 输出JVM启动和运行时的详细信息;-Xms设置初始堆大小,-Xmx设置最大堆大小...
而集合框架中的ArrayList、LinkedList、HashSet和HashMap等类,提供了动态扩容、迭代、查找和删除等特性,极大地提高了代码的可读性和灵活性。 在PPT中,我们将详细展示每种数据类型的用法,通过实例解释转换规则,...
- Map(如HashMap):默认容量16,超过阀值(容量*负载因子)时按2倍扩容。 12. **错误与异常**: - 错误:Java运行时系统内部错误,如OutofMemoryError。 - 异常:程序运行时可预见的问题,如...
- 数组扩容:`ary = Arrays.copyOf(ary, ary.length + 1);` #### 面向对象的三大原则 - **封装**:隐藏对象的属性和实现细节,仅对外提供公共访问方式。 - **继承**:子类继承父类的属性和方法,并可以扩展或覆盖...
当集合中的元素数量超过数组的初始容量时,集合会自动扩容,即创建一个新的更大的数组,并将原有数组中的所有元素复制到新数组中,这一过程不仅消耗CPU资源,还会产生大量的临时对象,增加垃圾回收的压力。...
默认容量是16,负载因子0.75,当元素达到一定数量时会自动扩容。 - `TreeMap`基于红黑树,保证了插入、删除和查找的时间复杂度为O(logn),它按照键的自然排序或自定义比较器进行排序。 了解这些基础概念有助于理解...
当数组容量不足时,会自动扩容,通常每次扩容为原来的两倍。 2. **JVM启动参数**: - `-verbose`:开启JVM的详细输出,例如垃圾回收信息。 - `-Xms`:设置JVM初始堆内存大小,例如`-Xms1024m`表示初始堆内存为1GB...
- **扩容过程**:扩容时会创建一个新的数组,所有旧数组的元素会被复制到新数组中。 - **并发特性**:ConcurrentHashMap通过分段锁或更细粒度的锁机制实现了更好的并发性能。 #### 10. LinkedList排序 - **推荐排序...
- **扩容机制**:当`HashMap`中元素数量超过数组长度*加载因子(默认0.75)时,就会进行扩容。扩容时将数组大小扩大为原来的两倍,并重新计算每个键值对应的哈希码,可能会导致部分元素需要重新分配位置。 ### ...
- 扩容发生在元素数量达到初始容量的1.5倍(默认负载因子0.75),每次扩容容量翻倍。 10. **HashMap的键要求** - 作为HashMap键的类必须正确实现equals()和hashCode()方法,以确保键的唯一性和查找效率。 11. **...
HashMap的初始容量通常是16,且每次扩容时容量翻倍。 此外,还有其他类型的Map,如TreeMap使用红黑树实现,保证了元素的排序性;LinkedHashMap保持插入顺序或者访问顺序;WeakHashMap中的键使用弱引用,当键的对象...
推荐使用`List<byte>`作为缓存结构,因为它提供了动态扩容、易于添加和删除元素的功能,避免了手动管理数组可能带来的数据丢失风险。在接收数据过程中,我们需要监听串口的`DataReceived`事件,逐个接收字节并将其...
19. **GO 语言是如何实现切片扩容的?** 当切片需要更多空间时,Go 会创建一个新的更大的底层数组,并将原有数据复制过去。通常情况下,新数组的大小是原数组大小的两倍。这一过程是自动完成的,用户无需手动干预...
- 两者都是动态数组实现,但在扩容策略上不同,`ArrayList`增长约为原来的50%,`Vector`则为100%。 8. **HashMap与Hashtable的区别**: - `Hashtable`是基于早期的`Dictionary`类,而`HashMap`是`Map`接口的实现...
- Array是固定长度的,ArrayList长度可变,可自动扩容。 - Array只能存储同类型数据,ArrayList可存储不同类型的对象。 - ArrayList提供了丰富的操作方法,如添加、删除、查找等。 7. **&与&&的区别** - `&`既...