getBytes()
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这表示在不同的操作系统下,返回的东西不一样!
1、 str.getBytes();
如果括号中不写charset,则采用的是Sytem.getProperty("file.encoding")
,即当前文件的编码方式,
2、 str.getBytes("charset");
//指定charset,即将底层存储的Unicode码解析为charset编码格式的字节数组方式
3、String str=new String(str.getBytes("utf-8"),"gbk"));
//
将已经解析出来的字节数据转化为gbk编码格式的字符串,在内存中即为gbk格式的字节数组转为Unicode去交互传递 。
package carl.com;
import java.io.UnsupportedEncodingException;
public class GetBytesDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
**/**
* getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
* getBytes(): 使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
*
* new string(byte[],charset):使用指定的字符集将byte序列解码成字符串
*/**
//定义一个中文字符串;
String s1 = "我爱我家";
System.out.println(s1);//输出 我爱我家
String s2 = new String(s1.getBytes("UTF-8"),"UTF-8");//先编码,再解码,都是用的UTF-8,所以输出正确
System.out.println(s2);//输出 我爱我家
String s3 = new String(s1.getBytes("GBK"),"GBK");
System.out.println(s3);//输出 我爱我家
String s4 = new String(s1.getBytes("GBK"),"UTF-8");
System.out.println(s4);//输出 ??????
String s5 = new String(s1.getBytes("UTF-8"),"GBK");
System.out.println(s5);//输出 鎴戠埍鎴戝
String s6 = new String(s1.getBytes(),"GBK");
System.out.println(s6);//输出 我爱我家
}
}
换行符
java中实现换行有以下3种方法:
1.使用java中的转义符"\r\n":
String str="aaa";
str+="\r\n";
这样在str后面就有换行了.
注意:\r,\n
的顺序是不能够对换的,否则不能实现换行的效果.
\r: return 到当前行的最左边。
\n: newline 向下移动一行,并不移动左右。
System.out.println() 和 Logger
第一行数据是使用system输出的,第二行数据是通过logger输出的,从上面可以看到,system输出的日志仅仅是输出对象本身,而通过logger输出的日志,不光会输出对象本身,还会输出代码运行的时间,是哪一个class文件输出的日志,在哪一行输出的,很方便。
想要使用logger输出日志,首先需要引入包:log4j-1.2.16.jar
然后在class文件中配置:就可以使用logger来输出日志了。
private static Logger logger = Logger.getLogger(OrderDetailsQueryContactHandler.class);
System.out.print与Log比较
System.out.print的优点:直观、方便。
Log的优点:异步、解耦、灵活、策略多。
提到System.out.print,除了感觉到方便之外,还会想到其他的优点吗?似乎也就这个优点,syso快捷键瞬间就是一条打印语句,很顺手的一件事,除了这个感觉外,似乎也没有其他特别的感受了。
System.out.print和java运行程序运行在同一线程,也就是说,业务程序会等待System.out的动作,导致资源被占用,log4j、logback等日志工具进行调试信息的打印,这类工具是异步线程的,不会使程序处于等待状态。
System.out.print是在控制台输出,只能输出到控制台,功能上线后,总不能一直盯着控制台吧,而且日志文件需要保留,以供日后分析,是需要一套管理规范的,即便使用tomcat服务器,System.out会输出到catalina.out文件,catalina.out文件也不会一直存在,需要定期清空,如果不清空,大文件的读写也是挺影响性能的。说到这里,System.out.print写入的文件只有一个,对于一个文件的读写,这个io肯定会排队写,且System.out.print在当前线程,肯定对性能会有稍微的影响。
程序中充斥着大量的System.out.print打印代码是相当不规范的。