社区
Java SE
帖子详情
将大长度的byte[]数组按照数组中值为指定的两个数值分割为集合
yueguangkai001
2010-04-20 07:18:00
如题
将一个长度为很大的byte[]数组进行分割
byte数组中有两个连接的数值譬如说是 47 110 这两个值在一起就进行分割,分割为集合
最好就是要求效率高一点,由于byte数组中的数据量比较大,没有效率的话会很慢
请高手指点指点
...全文
1626
34
打赏
收藏
将大长度的byte[]数组按照数组中值为指定的两个数值分割为集合
如题 将一个长度为很大的byte[]数组进行分割 byte数组中有两个连接的数值譬如说是 47 110 这两个值在一起就进行分割,分割为集合 最好就是要求效率高一点,由于byte数组中的数据量比较大,没有效率的话会很慢 请高手指点指点
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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...
数据基础---numpy、pandas使用教程
1、基础篇官网文献,或者更详细的资料 numpy的主要目标是构造由同种元素组成的多维
数组
,也就是一张在的表格,因为python自带的array.array,只能创建一维
数组
,并且只有简单的功能。所有的元素都是同一数据类型,元素通过索引定位,索引为整数,用元组来表示。在numpy中每一个维度都被称为轴,而轴的数目就是多维
数组
的秩。 例如:[1,2,3]是一个秩为1的
数组
,该轴的
长度
为3,可以表示三
C# 试题库知识点,填空题、选择题,判断题,编程题【共940道题】
1、操作符( && )被用来说明
两个
条件同为真的情况。2、接口只能定义方法,实现要由( 类 )完成。3、任何事物都是(对象),它可以是现实世界中的一个物理对象,可以是抽象的概念或规则。4、( += )运算符将左右操作数相加的结果赋值给左操作数。5、( Array )是所有
数组
的基类。6、如果一个属性里既有set访问器又有get访问器,那么该属性为( 读写 )属性。7、如果一个属性里只有set 访问器,那么该属性为( 只写 )属性。8、常量通过关键字( const )进行声明。9、在C#中,进行注释有两种
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章