字节流、字符流和排队策略

排队策略

1、直接提交:工作队列的默认选项就是SynchronousQueue,他讲任务直接提交给线程而不保存他们。在此次,如果不存在可用于立即运行任务的线程,则试图把任务加入队列将失败。因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集时出现锁。直接提交通常要求无界maximunPoolSizes以避免拒绝提交的任务。当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。


2、无界队列:使用无界队列将导致所有corePoolSize线程都忙时新任务在队列中等待。这样,创建的线程将不会超过corePoolSiz。当每个任务完全独立与其他任务时,即任务执行互不影响时,适合使用无界队列


3、有界队列:当使用有限的maximunPoolSizes是,有界队列有助于防止资源耗尽,但是可能较难调整和控制。队列大小和最大池大小可能需要相互折中。使用大型队列和小型池可以最大限度的降低CPU的使用率、操作系统资源和上下文切换开销,但是可能导致人工降低吞吐量。如果任务频繁阻塞,则系统可能为超过许可的更多线程安排时间。使用小型队列同城要求较大的池大小。CPU使用率较高,但是可能遇到不可接受的调度开销,这样也会降低吞吐量


字节流和字符流
字节流顾明思意就是以字节为单位的流,而字符流则是以字符为单位的流。我们都知道计算机是以字节进行存储操作的,怎么会出现字符流呢?原因是,字符流的出现是为了满足带有字符的一些文本操作,字节流无法直接解析文本中的特殊字符,如中文。而字符流的操作也是基于字节流的基础,在内存中将字节流转换为字符流


字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的。而字符流在操作的时候是使用到缓冲区的,字节流在操作文件时,即使不关闭资源,文件也能输出。但是如果字符流不适用close方法,则不会输出任何内容(可以使用flush输出),说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容


字符流处理的单元为2字节的Unicode,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流适合在Java虚拟机将字节转换为2个字节的Unicode字符为单位的字符而组成,所以它对多国语言定义比较好。如果是音频文件、图片、歌曲用字节流比较好。如果是中文,用字符流比较好。


所有文件的存储都是字节的存储,在磁盘上保留的并不是文件的字符而是先把字符编码为字节,在存储这些字节到磁盘。在读取文件时,也是一个字节一个字节得读取以形成字节序列


对于使用字节流还是字符流的问题,字节流的范围更广,字符流用于读取带有特殊字符的文本。因为字节流可以用于任何类型的对象,包括二进制对象,而字符流只能处理字符或字符串;字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。


他们主要的区别就是他们的处理方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值