String类型数据转换为byte再从byte转为String,为何这时数据前多了方形的空格? 如图:没太明白,之前没遇到过,今天重写了一个servlet,便出现这个问题了,莫名其妙... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dos.writeUTF(queryResult);这个方法会先写两个字节到输出流,这个两个字节的内容就是实际所写的的字节数。应该是这两个字节做的怪。 package defaultpackage;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;public class Test { public static void main(String[] args) { String s = "中国"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { dos.writeUTF(s); } catch (IOException e2) { e2.printStackTrace(); } byte[] b = null; try { b = s.getBytes("UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } try { System.out.println(new String(b,"UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}我试了下,没有你说的这种情况出现啊。应该是你程序本身的问题。建议把打印的位置换一换,比如说刚转换完毕后马上打印,看看结果,就能知道是在哪个环节出了问题 writeUTFpublic final void writeUTF(String str)throws IOException以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 首先,通过 writeShort 方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。 借用一下你的demo:public static void main(String[] args) throws Exception{ String s = "中国"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(s); byte[] b = baos.toByteArray(); for(int i=0;i<b.length;i++){ System.out.println(Integer.toHexString(b[i])); } System.out.println(">>>"+new String(b,"UTF-8")+"<<<"); System.out.println("--------------------"); byte[] b2 = s.getBytes("UTF-8"); for(int i=0;i<b2.length;i++){ System.out.println(Integer.toHexString(b2[i])); } } 我也遇到过后来该成writeBytes了。 如何用数组绘制一个“大富翁”游戏的地图: 寻求答案:如何用JAVA程序发送邮件附件(非JAVAMAIL类),主要是发送附件格式 何时使用多线程?? 关于Button事件(初级问题求教) 关于继承抽象类的一个问题,请帮忙。 怪问题,居然能用JAVA关键字做类名!!! 问个关于SimpleDateFormate的问题 请问大家想学JAVA,最好需要有什么基础才行? WebLogic与Corba!!Corba只能传送英文字符串,中文就报错!怎么办? 大佬们,帮我看看这道题怎么做? JAVA中创建子窗口。。。。。 关于泛型的理解问题
这个方法会先写两个字节到输出流,这个两个字节的内容就是实际所写的的字节数。
应该是这两个字节做的怪。
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;public class Test { public static void main(String[] args) {
String s = "中国";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeUTF(s);
} catch (IOException e2) {
e2.printStackTrace();
}
byte[] b = null;
try {
b = s.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
try {
System.out.println(new String(b,"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}我试了下,没有你说的这种情况出现啊。
应该是你程序本身的问题。
建议把打印的位置换一换,比如说刚转换完毕后马上打印,看看结果,就能知道是在哪个环节出了问题
public final void writeUTF(String str)throws IOException
以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
首先,通过 writeShort 方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。
借用一下你的demo:public static void main(String[] args) throws Exception{
String s = "中国";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(s);
byte[] b = baos.toByteArray();
for(int i=0;i<b.length;i++){
System.out.println(Integer.toHexString(b[i]));
}
System.out.println(">>>"+new String(b,"UTF-8")+"<<<");
System.out.println("--------------------");
byte[] b2 = s.getBytes("UTF-8");
for(int i=0;i<b2.length;i++){
System.out.println(Integer.toHexString(b2[i]));
}
}
后来该成writeBytes了。