社区
Java SE
帖子详情
将大长度的byte[]数组按照数组中值为指定的两个数值分割为集合
yueguangkai001
2010-04-20 07:18:00
如题
将一个长度为很大的byte[]数组进行分割
byte数组中有两个连接的数值譬如说是 47 110 这两个值在一起就进行分割,分割为集合
最好就是要求效率高一点,由于byte数组中的数据量比较大,没有效率的话会很慢
请高手指点指点
...全文
1587
34
打赏
收藏
将大长度的byte[]数组按照数组中值为指定的两个数值分割为集合
如题 将一个长度为很大的byte[]数组进行分割 byte数组中有两个连接的数值譬如说是 47 110 这两个值在一起就进行分割,分割为集合 最好就是要求效率高一点,由于byte数组中的数据量比较大,没有效率的话会很慢 请高手指点指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
justlearn
2010-04-21
打赏
举报
回复
[Quote=引用 25 楼 araychou 的回复:]
引用 23 楼 justlearn 的回复:
默认字符集 ISO-8859-1
这个难说,不同操作系统的默认设置,同种系统不同的参数设置,这个默认字符集是不一样的。
而且,我在运行tomcat的时候,通常会加一个 -Dfile.encoding=GBK 或者 -Dfile.encoding=UTF-8
[/Quote]
getBytes()和new String(byte[] b)在同一段代码里,至少保证了在两次转换中不会有问题,同样使用同一平台的字符集,当然,如果都设定下也是不错滴
ArayChou
2010-04-21
打赏
举报
回复
[Quote=引用 23 楼 justlearn 的回复:]
默认字符集 ISO-8859-1
[/Quote]
这个难说,不同操作系统的默认设置,同种系统不同的参数设置,这个默认字符集是不一样的。
而且,我在运行tomcat的时候,通常会加一个 -Dfile.encoding=GBK 或者 -Dfile.encoding=UTF-8
ArayChou
2010-04-21
打赏
举报
回复
[Quote=引用 22 楼 bawgiitx 的回复:]
将大长度的byte[]数组
byte[]有多少GB,CPU多核的?
[/Quote]
根据虚拟机规范,数组长度理论上最大可以达到Integer.maxValue();
justlearn
2010-04-21
打赏
举报
回复
[Quote=引用 20 楼 araychou 的回复:]
引用 16 楼 justlearn 的回复:
Arrays.copy 速度应该是快的,问题是他这里必须要先寻找需要copy的开始点和结束点,循环数组太慢
其次,String的getBytes()方法内部本身就是使用的Arrays.copy,可以看源码
用String来处理要考虑以下问题:
byte[]转换为String的时候,有一个charset的问题。如果你没有指定合……
[/Quote]
默认字符集 ISO-8859-1
bawgiitx
2010-04-21
打赏
举报
回复
将大长度的byte[]数组
byte[]有多少GB,CPU多核的?
ArayChou
2010-04-21
打赏
举报
回复
我还想到一个问题,如果楼主的byte[]相当的,速度又要求相当快的话。还可以将byte[]分为若干部分,开若干线程来分别处理,然后在汇总结果。
现在的机器一般是多核cpu,服务器更是多cpu,这样处理,效率可能会快n倍(n=cpu核心数)。
ArayChou
2010-04-21
打赏
举报
回复
[Quote=引用 16 楼 justlearn 的回复:]
Arrays.copy 速度应该是快的,问题是他这里必须要先寻找需要copy的开始点和结束点,循环数组太慢
其次,String的getBytes()方法内部本身就是使用的Arrays.copy,可以看源码
[/Quote]
用String来处理要考虑以下问题:
byte[]转换为String的时候,有一个charset的问题。如果你没有指定合适的字符集,肯定会出问题的。
(我没有去研究实际上有没有合适的字符集,我想应该有)。
其次,在byte[]转换为String的时候,实际上多了一个内存分配操作。楼主说这个byte[]是大长度的,不知道长度有多“大”,这个操作应该会耗点时间。不如直接访问原始byte[]数组比较来的快。
btw:直接访问byte[]查找特定值,可以参考String.indexOf的源码来些
ArayChou
2010-04-21
打赏
举报
回复
[Quote=引用 15 楼 hardycheng 的回复:]
有个 Arrays。copy
[/Quote]
我是来较真的,真的没有Arrays.copy,只有这个:
java.util.Arrays.copyOf(char[], int)
不过,他底层也是调用:
java.lang.System.arraycopy(Object, int, Object, int, int)
yueguangkai001
2010-04-21
打赏
举报
回复
[Quote=引用 16 楼 justlearn 的回复:]
Arrays.copy 速度应该是快的,问题是他这里必须要先寻找需要copy的开始点和结束点,循环数组太慢
其次,String的getBytes()方法内部本身就是使用的Arrays.copy,可以看源码
[/Quote]
我将数据流的数据打开看了下,没有超过FF的,就是说用String的方式不会产生丢失的现象
Arrays.copy我很想见识下,但是由于JDK1.5没看到,我也不做考虑,非常感谢各位的帮助,
但是遗憾的是,我的想法不对,将那些压缩数据放入文件流中,在转化为压缩数据,再来解压不行,解压还依赖与其他的参数,还是不能够将那些压缩数据进行转化为图片,最后进行播放
解压依赖的参数太郁闷了,线程太多,代码太难,郁闷,二次开发真不容易
yueguangkai001
2010-04-21
打赏
举报
回复
[Quote=引用 16 楼 justlearn 的回复:]
Arrays.copy 速度应该是快的,问题是他这里必须要先寻找需要copy的开始点和结束点,循环数组太慢
其次,String的getBytes()方法内部本身就是使用的Arrays.copy,可以看源码
[/Quote]
我将数据流的数据打开看了下,没有超过FF的,就是说用String的方式不会产生丢失的现象
Arrays.copy我很想见识下,但是由于JDK1.5没看到,我也不做考虑,非常感谢各位的帮助,
但是遗憾的是,我的想法不对,将那些压缩数据放入文件流中,在转化为压缩数据,再来解压不行,解压还依赖与其他的参数,还是不能够将那些压缩数据进行转化为图片,最后进行播放
解压依赖的参数太郁闷了,线程太多,代码太难,郁闷,二次开发真不容易
justlearn
2010-04-21
打赏
举报
回复
Arrays.copy 速度应该是快的,问题是他这里必须要先寻找需要copy的开始点和结束点,循环数组太慢
其次,String的getBytes()方法内部本身就是使用的Arrays.copy,可以看源码
hardycheng
2010-04-21
打赏
举报
回复
有个 Arrays。copy
不过对象只能是基本数据类型的数组的copy
而不能是一个对象的数组的copy
如果能用指针肯定很方便。
ArayChou
2010-04-21
打赏
举报
回复
[Quote=引用 12 楼 yueguangkai001 的回复:]
引用 10 楼 araychou 的回复:
其实,这个东西没有什么好的优化可言,就是要一个字节一个字节的比较,然后再调用二楼的Array.copy()就可以了
[/Quote]
对不起,我没有去考证,没有Array.copy()这个方法,整整的方法是这个:
java.lang.System.arraycopy(Object, int, Object, int, int)
这是一个native的方法,很有可能直接使用汇编语言编写的,内存拷贝用它肯定没错。
说道native的方法,如果将这个功能用C来实现,写一个native的方法,应该可以将速度增加,不过我没有写native的经验,不知道具体能提高多少
justlearn
2010-04-21
打赏
举报
回复
[Quote=引用 12 楼 yueguangkai001 的回复:]
引用 10 楼 araychou 的回复:
楼上转换为String在处理有可能有问题。楼主并没有说byte数组里存的东西可以正确转换为String. 如果转换不了,上面的代码就搞不定了。
其实,这个东西没有什么好的优化可言,就是要一个字节一个字节的比较,然后再调用二楼的Array.copy()就可以了
说的有理,我再想其他办法考虑下
二楼跟我所传的参数不对,更郁闷的是JDK……
[/Quote]
这个不用担心的,byte取值范围是-128~+127
总共256个,你可以循环打印看下,就是基础字符集。
所以转成String不存在问题,你回转回去也不会有问题。
yueguangkai001
2010-04-21
打赏
举报
回复
[Quote=引用 10 楼 araychou 的回复:]
楼上转换为String在处理有可能有问题。楼主并没有说byte数组里存的东西可以正确转换为String. 如果转换不了,上面的代码就搞不定了。
其实,这个东西没有什么好的优化可言,就是要一个字节一个字节的比较,然后再调用二楼的Array.copy()就可以了
[/Quote]
说的有理,我再想其他办法考虑下
二楼跟我所传的参数不对,更郁闷的是JDK1.5没有这样的特性
[Quote=引用 11 楼 justlearn 的回复:]
byte数组的东西怎么可能不能转化成String,你得明白byte里的东西是什么
[/Quote]
byte数组中的东西也不是很清楚,只知道是数据流,最后通过这些数据流转化为图片
justlearn
2010-04-21
打赏
举报
回复
[Quote=引用 10 楼 araychou 的回复:]
楼上转换为String在处理有可能有问题。楼主并没有说byte数组里存的东西可以正确转换为String. 如果转换不了,上面的代码就搞不定了。
其实,这个东西没有什么好的优化可言,就是要一个字节一个字节的比较,然后再调用二楼的Array.copy()就可以了
[/Quote]
byte数组的东西怎么可能不能转化成String,你得明白byte里的东西是什么
ArayChou
2010-04-21
打赏
举报
回复
楼上转换为String在处理有可能有问题。楼主并没有说byte数组里存的东西可以正确转换为String. 如果转换不了,上面的代码就搞不定了。
其实,这个东西没有什么好的优化可言,就是要一个字节一个字节的比较,然后再调用二楼的Array.copy()就可以了
justlearn
2010-04-21
打赏
举报
回复
[Quote=引用 8 楼 yueguangkai001 的回复:]
效率还不错,转化3.38MB的数据流只需要500多ms
要指出justlearn的一个错误都就是
String cut = string.substring(iStart,index+1);截取时不需要index+1,
String cut = string.substring(iStart,index);就可以了
[/Quote]
哈,代码我直接写的,没测试过,只是给你个方案,呵呵
yueguangkai001
2010-04-21
打赏
举报
回复
效率还不错,转化3.38MB的数据流只需要500多ms
要指出justlearn的一个错误都就是
String cut = string.substring(iStart,index+1);截取时不需要index+1,
String cut = string.substring(iStart,index);就可以了
yueguangkai001
2010-04-21
打赏
举报
回复
[Quote=引用 32 楼 araychou 的回复:]
如果byte[]是图片数据,我想数据中本生就含有大量的分割符号(字符‘/n’)。
你需要换个思路设计程序。考虑把程序设计成这样:
设计个一个“packet”, 前4个字节为一个int数,存放byte[]的长度。 后面就全是byte[]的内容。
你现读取4个字节,得到长度length。然后向后读取length个字节,这些就是你要的图片内容。
重复上面的,就得到所有的图片了。
……
[/Quote]
高见,我会按照你的方式去尝试的,非常感谢你对此问题的关注,我开了一个线程大量的写入文件,感觉程序吃不消了,郁闷
如果此问题未解决我将再开贴子,希望你能够再次关注
加载更多回复(13)
Java基础
java基础
MATLAB :向量、矩阵、
数组
、数据类型
sz的格式是包含
两个
元素的向量,即[m , n],表示一个 m 行 n 列的矩阵。an是向量尾元素的幂,即A(n)为10的an次幂,n是向量的维数。若S矩阵是稀疏的,而Y矩阵是全元素的,则不管I、J 是标量还是向量,右引用 Y=S(I,J) 都生成稀疏矩阵,左引用 S(I,J)=Y 都生成满矩阵。如果A和B为矩阵或多维
数组
,则它们必须具有相同大小,此时cross函数将A和B视为三元素向量
集合
,计算对应向量沿大小等于3的第一个
数组
维度的叉积。a1是向量的首元素,an是向量的尾元素,n表示向量中元素的个数。
[转载] Python 学习 - Numpy
参考链接: Python中的numpy.iscomplex Numpy 学习 Ndarray对象 特点 N 维
数组
对象 一系列同类型数据的
集合
下标从0开始 每个元素在内存中占有相同存储大小 由什么构成 指向数据(内存中的一块数据)的指针元素的数据类型dtype,指示
数组
中
固定大小的格子表示
数组
形状(shape)的元组,表示每一维的大小跨度元组(stride)指示前进到当前维度下一个元素需要跨多少字节
长度
构造 nd.array(object, dtype = None...
【2021 春招 秋招】Java 面试知识点【背诵版 240题 约7w字】
Java面试知识点 包括 语言 数据结构和算法 数据库 内容详尽!
Python科学计算基础模块Numpy及其应用
Numpy(Numeric Python)是应用Python进行科学计算时的基础模块。它是一个提供多维
数组
对象的Python库,除此之外,还包含了多种衍生的对象(比如掩码式
数组
(masked arrays)或矩阵)以及一系列的为快速计算
数组
而生的例程,包括数学运算,逻辑运算,形状操作,排序,选择,I/O,离散傅里叶变换,基本线性代数,基本统计运算,随机模拟等等。 Numpy库中最...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章