• 关于

    bytebuffer

    的搜索结果

回答

ByteBuffer定义了4个static方法来做创建工作:ByteBuffer allocate(int capacity) //创建一个指定capacity的ByteBuffer。ByteBuffer allocateDirect(int capacity) //创建一个direct的ByteBuffer,这样的ByteBuffer在参与IO操作时性能会更好ByteBuffer wrap(byte [] array)ByteBuffer wrap(byte [] array, int offset, int length) //把一个byte数组或byte数组的一部分包装成ByteBuffer。一个使用ByteBuffer的例子,这个例子从标准输入不停地读入字符,当读满一行后,将收集的字符写到标准输出:public static void main(String [] args)throws IOException{// 创建一个capacity为256的ByteBufferByteBuffer buf = ByteBuffer.allocate(256);while (true) {// 从标准输入流读入一个字符int c = System.in.read();// 当读到输入流结束时,退出循环if (c == -1)break;// 把读入的字符写入ByteBuffer中buf.put((byte) c);// 当读完一行时,输出收集的字符if (c == 'n') {// 调用flip()使limit变为当前的position的值,position变为0,// 为接下来从ByteBuffer读取做准备buf.flip();// 构建一个byte数组byte [] content = new byte[buf.limit()];// 从ByteBuffer中读取数据到byte数组中buf.get(content);// 把byte数组的内容写到标准输出System.out.print(new String(content));// 调用clear()使position变为0,limit变为capacity的值,// 为接下来写入数据到ByteBuffer中做准备buf.clear();}}}
wangccsy 2019-12-02 01:48:58 0 浏览量 回答数 0

回答

" 猜测是你设置的不准确,按照你的代码,我做了测试: <code class=""java"">while (iterator.hasNext()) { SelectionKey key = iterator.next(); SocketChannel socketChannel = ((ServerSocketChannel) key.channel()).accept(); //设置缓冲区大小 socketChannel.setOption(StandardSocketOptions.SO_SNDBUF,1000 * 1024); System.out.println(socketChannel.getOption(StandardSocketOptions.SO_SNDBUF)); socketChannel.configureBlocking(false); ByteBuffer byteBuffer = ByteBuffer.allocate(1000 * 1024); System.out.println("byteBuffer.limit()=" + byteBuffer.limit()); System.out.println(socketChannel.write(byteBuffer)); System.out.println("byteBuffer.position()=" + byteBuffer.position()); socketChannel.close(); } //输出 1024000 byteBuffer.limit()=1024000 1024000 byteBuffer.position()=1024000###### 没有规定必须一次就把全部数据写完吧,"
因为相信,所以看见。 2020-05-27 17:52:25 0 浏览量 回答数 0

回答

FileChannel 读取进来后得到bytebuffer对象,然后从bytebuffer中一个一个getShort()出来就可以了 ######注意字节序ByteOrder###### 引用来自“动力板砖”的评论 FileChannel 读取进来后得到bytebuffer对象,然后从bytebuffer中一个一个getShort()出来就可以了 static short[] readHdcpKey(String filepath) {         short[] data = null;         FileInputStream fileIn = null;         try {             fileIn = new FileInputStream(filepath);         } catch (FileNotFoundException e) {         }         FileChannel fileCh = fileIn.getChannel();     } 比如这样之后怎么做呢? ###### ByteBuffer bytedata = ByteBuffer.allocate(100); int len=0;         while(len=fileCh.read(bytedata)!= -1){ 读取后就在这里处理bytebuffer吧          }   ###### 引用来自“动力板砖”的评论 ByteBuffer bytedata = ByteBuffer.allocate(100); int len=0;         while(len=fileCh.read(bytedata)!= -1){ 读取后就在这里处理bytebuffer吧          }   非常感谢!
kun坤 2020-06-07 16:05:56 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

100+款试用云产品,最长免费试用12个月!拨打95187-1,咨询专业上云建议!

问题

Java NIO写入异常问题报错

" 在使用NIO进行写入数据时,我把缓冲区增大1000k,为什么这时会出现没有写完的情况?? public class Server { public static void...
因为相信,所以看见。 2020-05-27 10:00:28 7 浏览量 回答数 1

问题

Java ByteBuffer转为字符串

这是将ByteBuffer转换为String的正确方法吗? String k = "abcd"; ByteBuffer b = ByteBuffer.wrap(k.getBytes()); S...
保持可爱mmm 2020-02-08 10:25:07 0 浏览量 回答数 1

问题

关于PCM数据的混音计算

每个样本16bit该怎么对两路语音进行混音呢?我的算法很简单,就是让两路先分别除以二,再相加比如,设两路数据存在ByteBuffer对象byteBuffer1、byteBuffer2里(capacity都为960),则byteBuffer1...
蛮大人123 2019-12-01 19:59:28 2197 浏览量 回答数 1

问题

ByteBuffer类中的get方法为抽象的为什么可以直接使用?

ByteBuffer类中的get方法为抽象的,为什么下面的程序可以直接使用? public class GetChannel { private static final int BSIZE = 1024; public stati...
蛮大人123 2019-12-01 20:16:37 1178 浏览量 回答数 1

回答

一般是网络数据包或者文件数据处理。1、包java.nio.ByteBuffer2、byte[] bytes = new byte[16];ByteBuffer buffer = ByteBuffer.wrap(bytes); 直接可以操作直接缓冲区对象。
徐雷frank 2019-12-02 01:48:59 0 浏览量 回答数 0

问题

从Java中的ByteBuffer获取字节数组

这是从ByteBuffer获取字节的推荐方法吗 ByteBuffer bb =.. byte[] b = new byte[bb.remaining()] bb.get(b, 0, b.length); 问题来源于sta...
保持可爱mmm 2020-02-08 13:57:37 2 浏览量 回答数 1

回答

MappedByteBufferMappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高。NIO最主要的就是实现了对异步操作的支持。其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey),键中包含了SOCKET事件信息。这就是select模型。SocketChannel的读写是通过一个类叫ByteBuffer(java.nio.ByteBuffer)来操作的.这个类本身的设计是不错的,比直接操作byte[]方便多了. ByteBuffer有两种模式:直接/间接.间接模式最典型(也只有这么一种)的就是HeapByteBuffer,即操作堆内存 (byte[]).但是内存毕竟有限,如果我要发送一个1G的文件怎么办?不可能真的去分配1G的内存;这时就必须使用"直接"模式,即 MappedByteBuffer 文件映射.先中断一下,谈谈操作系统的内存管理.一般操作系统的内存分两部分:物理内存;虚拟内存.虚拟内存一般使用的是页面映像文件,即硬盘中的某个(某些)特殊的文件.操作系统负责页面文件内容的读写,这个过程叫"页面中断/切换". MappedByteBuffer也是类似的,你可以把整个文件(不管文件有多大)看成是一个ByteBuffer.MappedByteBuffer 只是一种特殊的 ByteBuffer ,即是ByteBuffer的子类。 MappedByteBuffer 将文件直接映射到内存(这里的内存指的是虚拟内存,并不是物理内存)。通常,可以映射整个文件,如果文件比较大的话可以分段进行映射,只要指定文件的那个部分就可以。三种方式:FileChannel提供了map方法来把文件影射为内存映像文件: MappedByteBuffer map(int mode,long position,long size); 可以把文件的从position开始的size大小的区域映射为内存映像文件,mode指出了 可访问该内存映像文件的方式:READ_ONLY,READ_WRITE,PRIVATE. READ_ONLY,(只读): 试图修改得到的缓冲区将导致抛出 ReadOnlyBufferException.(MapMode.READ_ONLY) READ_WRITE(读/写): 对得到的缓冲区的更改最终将传播到文件;该更改对映射到同一文件的其他程序不一定是可见的。 (MapMode.READ_WRITE) PRIVATE(专用): 对得到的缓冲区的更改不会传播到文件,并且该更改对映射到同一文件的其他程序也不是可见的;相反,会创建缓冲区已修改部分的专用副本。 (MapMode.PRIVATE) 三个方法:force()缓冲区是READ_WRITE模式下,此方法对缓冲区内容的修改强行写入文件 load()将缓冲区的内容载入内存,并返回该缓冲区的引用 isLoaded()如果缓冲区的内容在物理内存中,则返回真,否则返回假 三个特性:调用信道的map()方法后,即可将文件的某一部分或全部映射到内存中,映射内存缓冲区是个直接缓冲区,继承自ByteBuffer,但相对于ByteBuffer,它有更多的优点:读取快 写入快 随时随地写入
wangccsy 2019-12-02 01:48:59 0 浏览量 回答数 0

回答

看看ByteBuffer类。 ByteBuffer b = ByteBuffer.allocate(4); //b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN. b.putInt(0xAABBCCDD); byte[] result = b.array(); 设置字节顺序保证了result[0] == 0xAA,result[1] == 0xBB,result[2] == 0xCC和result[3] == 0xDD。 或者,您可以手动执行以下操作: byte[] toBytes(int i) { byte[] result = new byte[4]; result[0] = (byte) (i >> 24); result[1] = (byte) (i >> 16); result[2] = (byte) (i >> 8); result[3] = (byte) (i />> 0/); return result; } 该ByteBuffer班是专为尽管这样的脏手任务。实际上,私有java.nio.Bits定义了以下辅助方法ByteBuffer.putInt(): private static byte int3(int x) { return (byte)(x >> 24); } private static byte int2(int x) { return (byte)(x >> 16); } private static byte int1(int x) { return (byte)(x >> 8); } private static byte int0(int x) { return (byte)(x >> 0); }
保持可爱mmm 2020-02-07 13:18:57 0 浏览量 回答数 0

回答

java字节序字节序分为两种: BIG-ENDIAN—-大字节序 LITTLE-ENDIAN—-小字节序 BIG-ENDIAN就是最低地址存放最高有效字节。 LITTLE-ENDIAN是最低地址存放最低有效字节。 java字节序:JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是BIG-ENDIAN。 java中转换字节序ByteBuffer类中的order(ByteOrder bo) 方法可以设置 ByteBuffer 的字节序。 其中的ByteOrder是枚举: ByteOrder BIG_ENDIAN 代表大字节序的 ByteOrder 。 ByteOrder LITTLE_ENDIAN 代表小字节序的 ByteOrder 。 ByteOrder nativeOrder() 返回当前硬件平台的字节序。 作者:aloserbird 来源:CSDN 原文:https://blog.csdn.net/aloserbird/article/details/78089962 版权声明:本文为博主原创文章,转载请附上博文链接! java字节序字节序分为两种:BIG-ENDIAN—-大字节序LITTLE-ENDIAN—-小字节序BIG-ENDIAN就是最低地址存放最高有效字节。LITTLE-ENDIAN是最低地址存放最低有效字节。java字节序:JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是BIG-ENDIAN。java中转换字节序ByteBuffer类中的order(ByteOrder bo) 方法可以设置 ByteBuffer 的字节序。其中的ByteOrder是枚举: ByteOrder BIG_ENDIAN 代表大字节序的 ByteOrder 。ByteOrder LITTLE_ENDIAN 代表小字节序的 ByteOrder 。ByteOrder nativeOrder() 返回当前硬件平台的字节序。
cysnow 2019-12-02 01:48:59 0 浏览量 回答数 0

回答

public static long bytes2long(byte[] param) { long result = 0; if (param== null || param.length == 0) { return result; } ByteBuffer buffer = ByteBuffer.wrap(param); return buffer.getLong(); }
牧码 2019-12-02 01:48:27 0 浏览量 回答数 0

回答

安迪·托马斯(Andy Thomas)提到了一种ByteBuffer将a 解码为a String而没有任何问题的更简单方法。 String s = StandardCharsets.UTF_8.decode(byteBuffer).toString();
保持可爱mmm 2020-02-08 10:25:23 0 浏览量 回答数 0

回答

ByteBuffer没有实现java.io.Serializable接口。使用ObjectOutputStream 写的类型数据都是要求实现这个接口的。你可以自己写一个类实现java.io.Serializable接口,然后把需要加载到ByteBuffer的数据赋值到你自己的类。
苍霞学子 2021-03-14 22:21:23 0 浏览量 回答数 0

回答

public static ByteBuffer allocate(int capacity) { if (capacity < 0) throw new IllegalArgumentException(); return new HeapByteBuffer(capacity, capacity); } allocate实例化返回的是个HeapByteBuffer。 class HeapByteBuffer extends ByteBuffer所以此处是父类的抽象方法调用具体的子类实例化的方法
蛮大人123 2019-12-02 02:06:18 0 浏览量 回答数 0

回答

实际上,有许多种处理字节的方法。我同意选择最佳的方法并不总是那么容易: 的 byte[] 的 java.nio.ByteBuffer 的java.io.ByteArrayOutputStream(与其它流组合) 的 java.util.BitSet 的byte[]仅仅是一个原始阵列,只是包含的原始数据。因此,它没有用于构建或处理内容的便捷方法。 A ByteBuffer更像是建造者。它创建一个byte[]。与数组不同,它具有更方便的辅助方法。(例如append(byte)方法)。在用法上并不是那么简单。(大多数的教程是太复杂或质量较差,但是这一个会得到你的地方。把它一步?然后阅读有关的诸多陷阱。) 你可能会倾向于说,一个ByteBuffer不给byte[],什么StringBuilder做的String。但是ByteBuffer该类存在特定的差异/缺点。就像使用数组,该ByteBuffer有一个固定的大小。因此,在实例化它时,您已经必须指定缓冲区的大小。 这就是原因之一,为什么我经常喜欢使用,ByteArrayOutputStream因为它会像an ArrayList一样自动调整大小。(它有一个toByteArray()方法)。有时将其包装在实用DataOutputStream。这样做的好处是,您将获得一些其他的便捷调用(例如,writeShort(int)如果您需要写入2个字节)。 BitSet当您要执行位级操作时,它会派上用场。您可以获取/设置各个位,并且具有类似的逻辑运算符方法xor()。(该toByteArray()方法仅在Java 7中引入。) 当然,根据您的需求,您可以结合所有这些来建立您的byte[]。
保持可爱mmm 2020-02-09 13:10:44 0 浏览量 回答数 0

回答

使用Java NIO的ByteBuffer非常简单: byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array(); for (byte b : bytes) { System.out.format("0x%x ", b); } 输出: 0x65 0x10 0xf3 0x29 问题来源于stack overflow
保持可爱mmm 2020-01-16 17:24:24 0 浏览量 回答数 0

回答

取决于您要做什么。 如果您要检索的是剩余字节(在位置和限制之间),那么您所拥有的将起作用。您也可以这样做: ByteBuffer bb =.. byte[] b = new byte[bb.remaining()] bb.get(b); 根据ByteBuffer javadocs 等效。
保持可爱mmm 2020-02-08 13:58:06 0 浏览量 回答数 0

回答

这个问题解决了吗? 我也遇到了同样的问题..... ###### 引用来自“ijtihat”的答案 这个问题解决了吗? 我也遇到了同样的问题..... 后来就是这样做了,在上面将channel设置为阻塞模式之前,先要取消其对应的SelectionKey: key.cancel(); selector.selectNow(); 在阻塞模式下处理完后,channel重新注册到selector: channel.configureBlocking(false); channel.register(selector,SelectionKey.OP_READ); 如果你有一些参数需要带着的话,可以看一下key.attach()方法 ######在消息中包含消息长度,channel读取时,用一个容量为4字节的bytebuffer读出长度值length,再新建一个容量为length的bytebuffer把消息读到。当然,用同一个bytebuffer设置limit来可以实现一样效果。
kun坤 2020-06-07 21:24:19 0 浏览量 回答数 0

问题

关于NIO读取数据的问题:报错

InetSocketAddress ia = new InetSocketAddress("www.baidu.com", 80); SocketChannel socket = SocketChanne...
kun坤 2020-06-07 21:18:04 0 浏览量 回答数 1

问题

rocketmq启动broker报错

WARN BrokerControllerScheduledThread1 - registerBroker Exception, localhost:9876org.apache.rocketmq.remoting.exception.R...
mddream 2019-12-01 19:30:48 4356 浏览量 回答数 4

回答

我想请问一下  客户端在读数据的时候  SocketChannel sc = (SocketChannel) sk.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); sc.read(buffer); buffer.flip(); 如果是数据量稍微有点大 比如4000多字节的时候 , 这时候接收的数据就分段了, 我想这个与缓冲区有关系,但是我缓冲区设置的足够大了 -----ByteBuffer.allocate(10240), 这种情况应该如何处理呢? ######这里要Mark一下,我的代码报 java.nio.channels.NotYetConnectedException ...###### 测试可用,稍微修改下应该就能移植到android端,楼主留的原网址已经打不开了,幸好你这边有转载,辛苦了######封装的真好!赞一个!######  // 读取信息获得读取的字节数     longbytesRead=clientChannel.read(buffer); 一旦建立连接,以上语句会使CPU占用率会提高到13%左右。
kun坤 2020-06-07 16:01:35 0 浏览量 回答数 0

回答

我也在尝试做类似的事情。我正在使用使用以下形式的UUID 6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8(由Java中的标准UUID库生成)的Java应用程序。就我而言,我需要能够将此UUID减少到30个字符或更少。我使用了Base64,这些是我的便利功能。希望它们会对某人有所帮助,因为解决方案对我而言并不明显。 用法: String uuid_str = "6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8"; String uuid_as_64 = uuidToBase64(uuid_str); System.out.println("as base64: "+uuid_as_64); System.out.println("as uuid: "+uuidFromBase64(uuid_as_64)); 输出: as base64: b8tRS7h4TJ2Vt43Dp85v2A as uuid : 6fcb514b-b878-4c9d-95b7-8dc3a7ce6fd8 功能: import org.apache.commons.codec.binary.Base64; private static String uuidToBase64(String str) { Base64 base64 = new Base64(); UUID uuid = UUID.fromString(str); ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); return base64.encodeBase64URLSafeString(bb.array()); } private static String uuidFromBase64(String str) { Base64 base64 = new Base64(); byte[] bytes = base64.decodeBase64(str); ByteBuffer bb = ByteBuffer.wrap(bytes); UUID uuid = new UUID(bb.getLong(), bb.getLong()); return uuid.toString(); }
保持可爱mmm 2020-02-08 21:16:22 0 浏览量 回答数 0

回答

public boolean storeImage(File file){ try{ // 打开文件 FileInputStream fin = new FileInputStream(file); // 建一个缓冲保存数据 ByteBuffer nbf = ByteBuffer.allocate((int) file.length()); byte[] array = new byte[1024]; int offset = 0, length = 0; // 读存数据 while((length = fin.read(array)) > 0){ if(length != 1024) nbf.put(array,0,length); else nbf.put(array); offset += length; } // 关闭文件 fin.close(); // 新建一个数组保存要写的内容 byte[] content = nbf.array(); String sql = "insert into images (bin_data) values (?) "; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setBytes(1,content); pstmt.execute(); pstmt.close(); }catch(Exception e){ e.printStackTrace(); return false; } return true; }
爵霸 2019-12-02 02:01:56 0 浏览量 回答数 0

问题

【译】Java 7 NIO.2 异步 IO vs ANSI C 性能测试? 400 报错

【译】Java 7 NIO.2 异步 IO vs ANSI C 性能测试? 400 报错 原文:http://www.hernandezgomez.com/2011/01/23/java-7-nio-2-asynchrono...
爱吃鱼的程序员 2020-06-03 14:51:16 1 浏览量 回答数 1

问题

TaintDroid剖析之File &amp; Memiry &amp; Socket级污点传播

TaintDroid剖析之File & Memiry & Socket级污点传播 作者:简行、走位@阿里聚安全 1、涉及到的代码文件 TaintDroid在File, Mem...
移动安全 2019-12-01 21:29:15 4335 浏览量 回答数 2

问题

使用SocketChannel的NIO客户机服务器通信示例:报错

这只是长征路上的一小步,以后还有待改进。 NIO Selector示意图: 客户端代码: import java.io.IOException; import java.net.Ine...
kun坤 2020-06-07 16:01:28 0 浏览量 回答数 1

回答

两者没什么关系。ByteBuffer是Java NIO中的buffer。而StringBuffer是字符串连接用的buffer类。
home3k 2019-12-02 01:49:00 0 浏览量 回答数 0

问题

[@wangccsy][¥20]Java 中怎么创建 ByteBuffer?

问题来自Java技术沙龙的李博Java线下沙龙报名链接:https://yq.aliyun.com/activity/796...
李博 bluemind 2019-12-01 19:26:52 421 浏览量 回答数 1

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT