关于Java String getByte效率问题

String->byte 可通过调用getByte函数
byte->String 可通过new String(byte, off, len, charset)

问题:
方案一:多个字符串需要->byte,之前的做法是调用多次getByte,效率低,但是能够通过new String(byte, off, len, charset)还原
方案二:把多个字符串拼接(类似StringBuilder),然后做一次getByte调用效率会高很多,但如何还原多个String?

大家有什么好的方案或思路吗?

lorewolf311
tianchao_ 你在做什么 ? 会考虑这样的效率问题
大约 5 年之前 回复

7个回答

拼接:
StringBuffer sb = new StringBuffer();
sb.append("字符串1");
sb.append("字符串2");
还原:
String str = sb.toString();
String aa = str.subString("字符串1".length);
String aa = str.subString("字符串1".length,"字符串1".length+"字符串2".length);
纯手打,望采纳

sunmonve
sunmonve 这位朋友,我觉得你的这个思路是可行:)
大约 5 年之前 回复

还原是什么意思?????
用变量记住不可以吗

序列化serialization

不行就用队列的形式来

你要是多个字符串都要getbyts的话,你可以把想要的全部连接在一起,然后再getbyts啊。
比如 连接成如下:a@b@c@d@这样的方式,然后你接收的时候,再split就可以了。

sunmonve
sunmonve 补充以下,这位朋友,你的这个方案我感觉的会产生以下两个问题: 1.分割符的选择。 2.split的效率可能会比多次getbyts要更耗时
大约 5 年之前 回复
M44346460
M44346460 这就相当于分次做,和一次完成。至少比一次一次调用getBytes要快。至于效率能有多少提高,取决是否满足业务上处理的需要!
大约 5 年之前 回复
sunmonve
sunmonve 这为朋友的方案是可行的,但是效率如何呢?
大约 5 年之前 回复

你想要的可能是这个:
http://andot.iteye.com/blog/662657
Hprose、Java、Hessian序列化效率比较图

为什么拼接在一起就比分开效率高很多?你验证过吗?
1、转换的字节总数是一样的
2、拼接也要花时间
3、JVM更擅长管理小对象。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
String源码分析之getByte乱码
当我们想把字符串转化为某种类型的编码格式时,容易出现乱码;比如下面的代码,很容易造成误区,getByte里面的gbk编码到底是编码还是解码;调用这个方法前,字符串之前编码了没;怎么还原字符串等等 1.示例演示 String testStr="I love 中国"; byte[] bytes = testStr.getBytes("gbk"); Strin
getByte(。。)的问题
String str="123我是谁";//win2000下rnstr.getBytes().length;//=9rnstr.getBytes("8859_1").length;//=6 也就是说这个byte[]不能恢复为"123我是谁"rnrn但是在一些jsp中解决乱码的方法是以下这样...怎么可以恢复的呢,rn new String(str.getBytes("8859_1"),"gbk");//这里假设str=request.getParameter("str");rnrn各位老大能给我详细讲解一下 new String(str.getBytes("encode"),"decode");这个用法吗?rn一直困扰的 多谢
关于string对象初始化的效率问题。
一个string对象由许多子串组成。那么初始化的时候第三种方法的效率会比前两种高吗?rnrnrn第一种方法:rnstring str="aaa";rnstr += str1;rnstr += "bbb";rnstr += str2;rnstr += "ccc";rnstr += str3;rnrn第二种方法:rnstring str="aaa"+str1+"bbb"+str2+"ccc"+str3;rnrn第三种方法:rnstring str=string.Format("aaa0bbb1ccc2",str1,str2,str3);rn
关于char *和 string的效率问题
两个效率谁高啊,在我的机子上测试是前者高,而C++primer 上说的是后者高,有点不一样
关于java效率的问题.
for (int i=0; i
String StringBuilder 效率问题
在什么情况下String 的效率要比StringBuilder 高呢????rn还麻烦说一下原因
string的效率问题
不知道string的效率如何rn现在有一个rnchar p[1024]的字符数组rn不断将字符填入prn想用string的一些方法,于是rnstring aString=string(p);rnstring b=p.substr(1,10)rn不知道这项是不是比自己在p上移动指针慢很多rn
String 和 StringBuffer的效率问题
① String aa = "aa" + "bb" + "cc";rn② StringBuffer aa = new StringBuffer("aa" + "bb" + "cc");rn③ StringBuffer aa = new StringBuffer();rn aa.append("aa");rn aa.append("bb");rn aa.append("cc");rnrn以上3个方案哪个效率高??为什么??
String与StringBuffer的效率比较(java)
 使用currentTimeMills()方法 currentTimeMills()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称做时间戳。程序如下: public class EffectCompare { public static void main(String[] ages) { String strin...
关于char *和string的效率比较
昨天本人发了“我是教条主义者,请大家将标准C++进行到底”的帖子,网友对其中的一个细节---char *和string的效率---提出了不同看法,现回答如下:rn Cybergate:您让我看《The c++ programming language题解》,但没有指明是那个地方,我姑且猜测是练习20。1(不知看对了没有)。rnrn//两个string版本的rnstring dotconnect (string const &a, string const &b)rnrn return a + '.' + b;rnrnrnrnstring dotconnect (string const &a, string const &b)rnrn string result(a.size() + b.size() + 1, '.');rn result.replace(0, a.size(), a);rn result.replace(a.size() + 1, b.size(), b);rn reutrn result;rnrnrn//C风格版本的rnchar * dotconnect (char const *a, char const *b)rnrn size_t alen = strlen(a), blen = strlen(b);rn char *result = (char *) malloc(alen + blen + 2);rn memcpy (result, a, alen);rn result[alen] = '.';rn memcpy (result + alen + 1, b, blen);rn result[alen + blen + 2] = '\0'; rn return result;rnrnrn作者提到,c风格的版本比string的第二个版本快了大约4倍,但是,正如作者所暗示的,这是一个不公平的测试,下面是另外一个更加不公平的测试,来自《C++ Primer》p82练习3。14。rnrnint main ()rnrn int errors = 0;rn const char *pc = "a very larg literal string";rn rn for (int ix = 0; ix < 1000000; ++ ix)rn rn int len = srlen (pc);rn char *pc2 = new char[len + 1];rn strcpy (pc2, pc);rn if (strcmp (pc2, pc))rn ++ errors;rn delete pc2;rn rnrnrnrnint main ()rnrn int errors = 0;rn string str("a very larg literal string");rn for (int ix = 0; ix < 1000000; ++ ix)rn rn int len = str.size();rn string str2 = str;rn if (str != str2)rn ++ errors;rn rnrn这里的string版本比char *版本的快两倍。rn不公平的大约是这两条语句。rnint len = strlen(pc);rnint len = str.size();rn由于string显式存储长度,而strlen通过遍历整个串来确定长度,所以在执行了1000000次之后,两者的快慢显示出来了。rn关于效率的问题,《题解》181面有着较为详细的分析,经过一番考虑后,我认为使用string代替char *,不仅能让我们避免很多麻烦,而且也不会丧失效率,甚至能提高我们的程序的效率(当然,如果您能确定不会出错而且效率问题很重要的话,我也不反对您使用char *)。rn实际上各个不同的实现也有着不同的效率,原则上string可以有着非常高的效率,所以,不要简单的认为string的效率不如char *.rn再次提倡大家使用 string。同是欢迎任何对我的批评。rnrnrnrn
Java关于String问题
1. string常量问题 1.1. 运行时常量池与Class文件常量池区别 JVM对Class文件中每一部分的格式都有严格的要求,每一个字节用于存储那种数据都必须符合规范上的要求才会被虚拟机认可、装载和执行;但运行时常量池没有这些限制,除了保存Class文件中描述的符号引用,还会把翻译出来的直接引用也存储在运行时常量区 java代码编译后,程序会先被编译为.class文件,编译后的字节码文件格式...
关于Java String的问题。
[code=java]rnpublic class Testerr rn public static void main(String[] args) rn String a = "Hello";rn String b = "Hello";rn final String c = "Hello";rn final String d = "Hello";rn String a1 = a + "World";rn String b1 = b + "World";rn String c1 = c + "World";rn String d1 = d + "World";rnrn boolean i = a1 == b1;rn boolean j = c1 == d1;rnrn System.err.println(i);rn System.err.println(j);rn rnrn[/code]rn结果:rn[code=java]rnfalserntruern[/code]rnrn这段代码看的不是很懂,求解释。
关于JAVA for循环效率的问题
今天在C#里面看到:之前一直认为for (int i = 0, h = arr.Count; i &amp;lt; h; i++)和for (int i = 0; i &amp;lt; arr.Count; i++)两种写法,在C#里应该是差不多的,今天突然有人问,就写了个程序测试了一下,结果出乎我的意料如果arr是List&amp;lt;T&amp;gt;,前者的效率比后者高大约一倍,如果arr是string[],两者效率基...
关于java new的效率问题
之前发了一个数据库连接慢的问题:通过打印显示是在已有一个数据库连接池正在连接的情况下用jdbc创建另一个连接会在从创建开始到结束等待5秒之久。rn刚才又发现了一个新问题:就是在同样new socket的时候也卡接近5秒。导致另外一个功能也显慢。rn这让我不得不怀疑是new引发的同类问题。然后我就费解了。如果不new难道要反射?而且效率好象只会低吧。rn如果有碰到同类问题的朋友或其他高手们,希望给个解决方案。感激不尽。
关于java读写文件的效率问题?
请教大家,java读写文件的类中,我读写的是文本文件。哪种效率会比较高。
关于Java的两个效率问题
1:假定一个方法,其中用到一个基本类型的临时变量来用作状态判断和返回值;而这个方法在一个程序中会被大量调用,那么在这里是使用局部变量还是全局变量更为合适?rn2:有如下两种处理方法,哪种在大中型项目中更为实用:rn[code=Java]/**rn * 方法说明: 将String中所有非数字去除后转换,若无数字则返回Long.MIN_VALUErn */rnrn public long fStrToLong(String s) rn long l = Long.MIN_VALUE;rn s = getLsFromStr(s);rn if (!"".equals(s))rn try rn l = Long.parseLong(s);rn catch (NumberFormatException e) rn e.printStackTrace();rn rn return l;rn rnrn /**rn * 方法说明:去除字符串中非数字部分 rn */rn private String getLsFromStr(String str) rn //返回去除字符串中非数字部分后的字符串rn [/code]rnrn[code=Java]/**rn * 方法说明: 根据check(是否需要去除非数字)要求,将String转换为数字,若无数字则返回Long.MIN_VALUErn */rnrn public long fStrToLong(String s,boolean check) rn long l = Long.MIN_VALUE;rn if(check) s = getLsFromStr(s);rn if (!"".equals(s))rn try rn l = Long.parseLong(s);rn catch (NumberFormatException e) rn e.printStackTrace();rn rn return l;rn /**rn * 方法说明:去除字符串中非数字部分 rn */rn private String getLsFromStr(String str) rn //返回去除字符串中非数字部分后的字符串rn [/code]rn谢谢~
String字符串拼接和StringBuilder.append()的效率问题
这是使用字符串拼接的代码,然后使用javap -c TestStringBuilder.class 然后可以看到 class java/lang/StringBuilder // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; // Method java/lang/Stri...
Java中关于String的问题
一个AbstractTableModel,使用getValueAt(),取得一个单元格的值,本想与另一个String比较,却发现结果一直是falsernrn如下:rn[color=#FF0000]System.out.println((String)cm.getValueAt(rowNum, 1).equals("家乐福"));[/color]rnrn其中cm是所创建的Model对象rnrn下面这个语句倒是可以输出"家乐福"的结果rn[color=#FF0000]System.out.println((String)cm.getValueAt(rowNum, 1));[/color]rnrn不知道为什么".equal()"失败rnrn查API文档,getValueAt()返回的是Object,但是强制转换为String应该没有问题啊rnrn奇怪...
getByte和URLEncoder的区别
String name=String n=new String("小叮当".getBytes("utf-8"));rnString name=URLEncoder.encode("小叮当","utf-8");rn是不是都是将中文转换成utf-8格式的编码?这两者有什么区别呢?
JAVA中int与string互转的效率对比
今天突然心血来潮,想看看int与string互转的效率,所以试一下。 1.int转string对比 众所周知,int转string有三种方法: &lt;pre name="code" class="html"&gt;* (1) String.valueOf(i) * (2) Integer.toString(i) * (3) i + "" 下面...
Java| String 字符串拼接方法 concat 和 + 效率比较
测试代码: public static void main(String[] args) { String str1 = &amp;quot;yveshe&amp;quot;; String str2 = &amp;quot;hello&amp;quot;; /** * concat */ System.gc(); long startTime1 = System.currentTimeMillis(); ...
java中String字符串拼接“+”和StringBuffer的效率对比
1、前言 (1)最近在做数据传输时,由于接收的数据量较大,在字符串拼接时使用了以前感觉方便的“+”进行字符串拼接,最后拼接到最后时间越来越多,导致效率变慢。 2、String拼接 首先来看一下两个String用“+”号拼接需要的时间 String aa=&quot;E0 00 00 00 00 06 10 FF F1 45 11 00 4F 16 12 00 1E 0A 13 00 0B 4E 1...
[Java]String和StringBuffer连接字串的效率比较
//[Java]String和StringBuffer连接字串的效率比较//连接字串,从1连到50000------------------------------------ public class StringBufferDemo{ public static void main(String args[]){ String str1 = "ShenQiang" ; long st
java 循环中String与StringBuilder效率探究
测试类:public class StringTest { @Test public void testString() { String str = ""; for (int i = 0; i < 3; i++) { str += i; } System.out.println(str);
java String变量判空 效率
Java中的String为引用类型,我们经常遇到判空的情况,str==null判断该字符串是否为null(空引用类型对象)。 str.isEmpty(),判断该字符串是否为空字符串; str.equals(&quot;&quot;),判断该字符串是否为空字符串。 isEmpty()和equals(&quot;&quot;)都可以判断该字符串是否为空字符串,但是equals()方法是根据str的hashcode来进行比较的,经测试,...
为什么Java StringBuilder的效率要比String高?
为什么Java StringBuilder的效率要比String高? 概述 在Java中,字符串拼接很常见,为什么总是说StringBuilder的效率要比String高呢,大概原因就是String是不可变对象,而StringBuilder在拼接时只是把字符串转为char拷贝到char[]。具体如下 String不可变 String对象不可变,则每次拼接都会创建新的String对象。即使在新的jd...
String和StringBuilder效率测试
本资源为String和StringBuilder效率测试代码,可直接运行,通过测试可以得出清晰的结果
请教string的效率
请问C++里面string的效率高还是c中用字符串数组的效率高?rn谢谢。rn
c-style string 效率比 std::string 效率低,why?
c++primer 上面的一道题 ,不知道原因。[code=C/C++]rn#include "stdafx.h"rn#include rn#include rn#include rn#include rnrnusing std::cout;rnusing std::cin;rnusing std::endl;rnusing std::string;rnrnint main()rnrnrn const char *pc = "a very long literal string";rn const size_t len = strlen(pc); // space to allocatern // performance test on string allocation and copyrn DWORD dw_now = GetTickCount();rn for (size_t ix = 0; ix != 1000000; ++ix) rn char *pc2 = new char[len + 1]; // allocate the spacern strcpy(pc2, pc); // do the copyrn if (strcmp(pc2, pc)) // use the new stringrn ; // do nothingrn delete []pc2; // free the memoryrn rn cout<
java中int转string,string转int效率对比
string转int,两种方法: 1、Interger.parseInt(String) 2、Interger.valueOf(String).intValue() 第二种方法可以去看源码,实现了第一种方法。 注释大概就是这样的意思 /**       *返回一个包含整数的对象       *指定的{@ String String}的值。 这个说法是       *被解释为
关于java C/S服务器端效率的问题
我是新手,想向大家讨教C/S模式下服务器端效率的问题.rn就像典型的聊天室或是QQ,如何提升服务器的性能.rn编写这样的服务器应该注意哪些,服务器端怎样才会更有效率.是客户端一直连接服务器好呢还是有需求时连接好?rn还有一个问题是,如果是有需求是连接服务器如何确定客户端以退出(包括突然死机断电情况),有没有更好的解决方案.rnrn正式的C/S项目里是如何解决这方面的问题的?rn谢谢大家.
=========关于JAVA输入输出流,BufferedReader.readLine()方法效率的问题=========
感觉readLine()是不是效率有点低?rn当我读入数据的时候,如果这个数据中间没有换行,rn那不就等于整个文件就只有1行?rn我测试了下,读入一个网页的源代码,结果发现rn读入这个网页的时候,耗费3秒多,rn而把这些数据读出来的时候,用了40多S。rn慢的厉害。rn有没有替代的方法?只能这样一行一行的读入?rnrn示例:rnrnBufferedReader in = new BufferedReader(new InputStreamReader(u.openStream()));rn StringBuffer cb = new StringBuffer();rn String tempCode = "";rn long t2 = System.currentTimeMillis();rn System.out.println("读取网页内容耗时:"+String.valueOf(t2-t1));rn // 把buffer内的值读取出来,保存到code中rn while ((tempCode = in.readLine()) != null) rn cb.append(tempCode + '\n');rn System.out.println(a);rn rn in.close();rn long t3 = System.currentTimeMillis();rn System.out.println("保存代码用时:"+String.valueOf(t3-t2));
JAVA关于字符串String
从概念上讲JAVA字符串就是Unicode字符序列(这里注意,String是final的)。     Strign有很多方法:截取子串用subString、拼接字符串用“+”号、判断字符串是否相等用equals等等     截取子串substring方法     String greet="hello";     String g=greet.substring(0,3);//这里表示从
关于java中的String
     java中有分为整型(int:4字节,short:2字节,long:8字节),浮点型(float:4字节,double:8字节),字节型(byte:1字节),字符型(char:2字节),boolean型8种基本数据类型      我们常用的字符串型其实就是一个通过Unicode编码的char类型数组      在java中,一个char是两个字节,一个汉字是一个字符也就是两个字节,所...
java初体验——关于String
不知大家有没有发现,String 中的s是大写的,而平时,类名首字母是大写的。其实String 的背后还有很多故事呢。下面让我们一起来揭开String 的神秘面纱。 [b][size=medium]1.String 是类[/size][/b] 有下面代码 [img]http://dl.iteye.com/upload/attachment/249237/56dd01e4-444d-3...
关于Java String 的创建
Java的两种初始化方法的一点区别其实是因为栈的共享数据的特性造成的,  java中创建并初始化一个String对象,最常见的方式有两种:  String str=new String(“XXX”);  String str=”XXX”;  二者看似相同,其实有很大的差别。  前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会在堆上面创建一个新的对象;后者则
关于Java String类
今天看Java源码里的String类里的objects方法,发现/var/folders/gl/vs84qbls1gb44f9g3g3bvdt80000gp/T/se.razola.Glui2/A1249B42-2981-4E9D-B7D6-31F3EA1BC41F-371-00001874FF5AA650/2016-10-07 at 21.05.png
关于if else 和 三目运算符的效率问题(java 版)
1.从类型转换上看,因为三目运算符在做判断的时候需要考虑到类型转换的问题,而if else 不需要考虑类型转换。 所以 if else 效率高一点。 2.从总体上看 A:需要考虑到循环自身所占用的时间。 B:需要考虑到赋值以及循环内的其他运算符所占用的时间。 所以 三目运算符效率高一点. 接下来一段代码来演示 2.p
JAVA读文件的效率问题
本人在解析文件的时候碰到了个问题,就是我把数据分成了很多部分,放到了不同的文件夹下面。方便通过关键字定位到数据,在解析的时候发现,第一次读这个文件的时候时间是30秒,第二次读就只有0.3秒了。搞不明白这个是什么情况。 这个文件所在的上一级目录下面有大概300多个文件夹。然后我把这个文件放到根目录下面,也就是上一级目录只有一个文件夹的情况,进行解析,速度还是很快的,只有不到1秒。也就是说上一级目录里面文件夹越多,解析的越慢,可以这样理解吗?rnrnrn还有就是第一个问题了,为什么第一次读的时候很慢,第二次读就非常快了,这个会有缓存还是什么?我想解析快点,有什么好的办法,让他第一次解析的时候就很快? 麻烦高手帮忙解答一下,谢谢 rnrn还有我想知道,这个是操作系统的问题还是JAVA的问题
java反射机制的效率问题
[size=medium]今天,用到了java的反射机制,忽然想到有同事说java的反射机制的效率非常的低,我google了一下,已经很多同学做了实验,效率比直接调用低了200多倍,不过,后来看到有人说,可以优化一下,把反射后的Method对象缓存下来,保存在一个map中,每次直接调用method.invoke(Object obj, Object... args)即可,但我担心线程安全问题。 ...
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表