April 26th
StringBuffer
- stringBuffer 源碼分析
如果傳入的minimumCapacity 還是不夠的話執(zhí)行 expandCapacity 方法
擴(kuò)充為原來的兩倍+2且警,默認(rèn)容量是16
StringBuffer sb=new StringBuffer(24);指定的容量越接近要存儲(chǔ)的數(shù)據(jù)越好。需要注意的是它擴(kuò)充的次數(shù)越多降宅,也會(huì)影響它的性能
- 這里有一篇區(qū)分String與StringBuffer的文章
String 不是簡單類型隙轻,而是一個(gè)類抵栈,它被用來表示字符序列蕾管。字符本身符合 Unicode 標(biāo)準(zhǔn)线衫,其初始化方式有兩種诲锹。
如:String greeting=“Good Morning! \n”;
String greeting=new String(=“Good Morning! \n”);
String的特點(diǎn)是一旦賦值繁仁,便不能更改其指向的字符對(duì)象,如果更改归园,則會(huì)指向一個(gè)新的字符對(duì)象 黄虱。
StringBuffer是一個(gè)具有對(duì)象引用傳遞特點(diǎn)的字符串對(duì)象。
StringBuffer對(duì)象可以調(diào)用其方法動(dòng)態(tài)的進(jìn)行增加庸诱、插入捻浦、修改和刪除操作,且不用像數(shù)組那樣事先指定大小桥爽,從而實(shí)現(xiàn)多次插入字符朱灿,一次整體取出的效果,因而操作字符串非常靈活方便钠四。
一旦通過StringBuffer生成最終想要的字符串盗扒,就可調(diào)用它的toString方法將其轉(zhuǎn)換為一個(gè)String對(duì)象
StringBuffer類 StringBuffer的兄弟StringBuilder:
- 一個(gè)可變的字符序列。此類提供一個(gè)與 StringBuffer 兼容的 API,但不保證同步缀去。該類被設(shè) 計(jì)用作 StringBuffer 的一個(gè)簡易替換,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候.
- 同步一個(gè)在用寧外一個(gè)就得等环疼,不同步的大家可以一起用,StringBuffer同步的(synchronized)效率慢但線程安全朵耕,
StringBuilder不同步的效率高炫隶,但線程不安全,不能用在多線程訪問的時(shí)候
IOStream
字節(jié)輸出流,從程序向文件輸出數(shù)據(jù)
OutputStream out =new FileOutputStream(file,true);
加true實(shí)在后面追加伪阶,沒有true是進(jìn)行覆蓋
字節(jié)輸入流煞檩,從文件向程序輸入數(shù)據(jù)
/*
*字節(jié)輸入流,從文件向程序輸入數(shù)據(jù)
*/
public static void read(){
File file=new File("c:\\a.txt");
try{
//針對(duì)文件創(chuàng)建一個(gè)輸入流
InputStream in=new FileInputStream(file);
byte[] bytes=new byte[1024*1024*10];//定義一個(gè)10MB的字節(jié)數(shù)組
int len=-1;
StringBuffer buf=new StringBuffer();
while((len=in.read(bytes))!=-1){
buf.append(new String(bytes,0,len));
}
in.close();//關(guān)閉
System.out.println(buf.toString());
}catch(IOException e){
e.printStackTrace();
}
}