当前位置: 首页 > news >正文

选择佛山顺德网站设计怎样做网站收广告费

选择佛山顺德网站设计,怎样做网站收广告费,wordpress汉化包,零基础网站建设教学服务背景: 今天在查找一个序列化和反序列化相关的问题时,意外发现使用DataInputStream读取和ByteBuffer读取之间性能相差巨大,本文就来记录下这两者在读取整数类型时的性能差异,以便在平时使用的过程中引起注意 DataInputStream数据…

背景:

今天在查找一个序列化和反序列化相关的问题时,意外发现使用DataInputStream读取和ByteBuffer读取之间性能相差巨大,本文就来记录下这两者在读取整数类型时的性能差异,以便在平时使用的过程中引起注意

DataInputStream数据读取 Vs ByteBuffer数据读取

我们会分别使用DataInputStream和ByteBuffer读取不同长度的字节数组,分别测试读取Short,Int,Long三类整数,然后分别看一下他们的性能

性能测试代码如下:

package org.example.jmh.deserialize;import static java.util.concurrent.TimeUnit.MICROSECONDS;
import static org.example.jmh.deserialize.DataUtil.createByteArray;import java.io.ByteArrayInputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;@Warmup(iterations = 2, time = 2)
@Measurement(iterations = 3, time = 10)
@Fork(1)
@OutputTimeUnit(MICROSECONDS)
public class ByteBufferVsByteArrayDataInputBenchmark {@State(Scope.Benchmark)public static class ByteBufferBackedDataInputState {ByteBuffer buffer;DataInput dataInput;@Param({"8", "32", "64", "128"})int size;byte[] data;public void createData() {this.data = createByteArray(size);}@Setup(Level.Trial)public void init() {createData();this.buffer = ByteBuffer.wrap(data);this.dataInput = new BufferDataInput(buffer);}void reset() {buffer.position(0);}}@State(Scope.Benchmark)public static class StreamBackedDataInpuState {ByteArrayInputStream bis;DataInput dataInput;@Param({"8", "32", "64", "128"})int size;byte[] data;public void createData() {this.data = createByteArray(size);}@Setup(Level.Trial)public void init() {createData();this.bis = new ByteArrayInputStream(data);this.dataInput = new DataInputStream(bis);}void reset() {bis.reset();}}@Benchmarkpublic void streamBackedDataInputReadShort(StreamBackedDataInpuState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readShort());pos += 2;}state.reset();}@Benchmarkpublic void bufferBackedDataInputReadShort(ByteBufferBackedDataInputState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readShort());pos += 2;}state.reset();}@Benchmarkpublic void streamBackedDataInputReadInt(StreamBackedDataInpuState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readInt());pos += 4;}state.reset();}@Benchmarkpublic void bufferBackedDataInputReadInt(ByteBufferBackedDataInputState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readInt());pos += 4;}state.reset();}@Benchmarkpublic void streamBackedDataInputReadLong(StreamBackedDataInpuState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readLong());pos += 8;}state.reset();}@Benchmarkpublic void bufferBackedDataInputReadLong(ByteBufferBackedDataInputState state, Blackhole bh) throws IOException {DataInput input = state.dataInput;int size = state.size;int pos = 0;while (pos < size) {bh.consume(input.readLong());pos += 8;}state.reset();}public static class BufferDataInput implements DataInput {private final ByteBuffer data;public BufferDataInput(ByteBuffer data) {this.data = data;}@Overridepublic void readFully(byte[] bytes) {}@Overridepublic void readFully(byte[] bytes, int i, int i1) {}@Overridepublic int skipBytes(int i) {data.position(data.position() + i);return data.position();}@Overridepublic boolean readBoolean() {return data.get() != 0;}@Overridepublic byte readByte() {return data.get();}@Overridepublic int readUnsignedByte() {return data.get() & 0xFF;}@Overridepublic short readShort() {return data.getShort();}@Overridepublic int readUnsignedShort() {return data.getShort() & 0xffff;}@Overridepublic char readChar() {return data.getChar();}@Overridepublic int readInt() {return data.getInt();}@Overridepublic long readLong() {return data.getLong();}@Overridepublic float readFloat() {return data.getFloat();}@Overridepublic double readDouble() {return data.getDouble();}@Overridepublic String readLine() {return null;}@Overridepublic String readUTF() {return null;}}}

jmh的测试结果:
在这里插入图片描述
从结果可以看出,不论是读取Short,Int还是Long,ByteBuffer都比DataInputStream有很大的性能优势,大概3-4倍的差异,那么你知道造成这种性能差距的原因是什么吗,留个悬念

http://www.yayakq.cn/news/442034/

相关文章:

  • 网站首页域名有后缀影响搜索吗外贸开发产品网站模板
  • php做购物网站系统学院管理网站建设
  • 怒江企业网站建设网站安全检测中心
  • server2008做DNS与网站如何做软件开发
  • 西安seo网站设计公司微信小程序线上商城怎么做
  • 做营销策划要用到哪些网站商业策划公司十大公司
  • 无网站网络营销域名网站有哪些
  • 做板子焊接的网站的公司名字外国网站签到做任务每月挣钱
  • 江苏省建设执业资格注册中心网站如何更改 网站 关键词
  • 岳阳网站定制优质的成都网站建设推
  • 做网站360好还是百度好甘肃住房建设厅网站
  • 建设银行官网网站首页纪念币预约东营注册公司
  • 中国建设通网站网站数据库 mysql
  • 监利网站滨海网站建设服务商
  • 多多进宝怎么做自己网站东莞营销型网站建设费用
  • 网站建设的维护与更新青岛软件开发公司
  • dedecms 调用 两个网站网站开发选题背景
  • 温州建设银行网站丹阳网站建设制作
  • php与mysql网站开发全接触企业如何做网络推广
  • 怎样建设网站后台网站制作需要多少钱
  • 淮北论坛招聘网seo建站还有市场吗
  • j2ee大型网站开发框架wordpress注册登录小工具
  • 网站合同租房子网站怎么做
  • wordpress菜单前面加图标网站模板对seo的影响
  • c 网站开发 视频网页设计与网站制作视频教程
  • 看p站用什么浏览器免费创建属于自己的网站
  • 中国搜索提交网站做公司网站有什么需要注意的
  • 做百度网站要多少钱百度网盘登录入口 网页
  • 销售网站建设推广如何在亚马逊上开店卖到国外
  • 网站优化的核心不包括公司网站开发的流程