本文目錄一覽:
- 1、java stringbuilder和stringbuffer的區別
- 2、請問JAVA中的BufferedReader是什麼意思?
- 3、JAVA中StringBuffer與StringBuilder、String的區別是什麼?
- 4、stringbuilder和stringbuffer的區別
- 5、Java SE使用StringBuffer和StringBuilder的時機有什麼不一樣?到底哪個更適合多線程的環境?
- 6、Java中有很多輸入輸出類,為啥還要有個Buffer的輸入輸出類呢?有沒有Buffer的有啥差別?
java stringbuilder和stringbuffer的區別
是否多線程安全
String中的對象是不可變的,也就可以理解為常量,顯然線程安全。
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字元串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。看如下源碼:
1 public synchronized StringBuffer reverse() {
2 super.reverse();
3 return this;
4 }
5
6 public int indexOf(String str) {
7 return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法
8 }
StringBuilder並沒有對方法進行加同步鎖,所以是非線程安全的。
StringBuilder與StringBuffer共同點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。
抽象類與介面的其中一個區別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重複寫已經存在的方法;而介面中只是對方法的申明和常量的定義。
StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。
最後,如果程序不是多線程的,那麼使用StringBuilder效率高於StringBuffer。
請問JAVA中的BufferedReader是什麼意思?
BufferedReader是緩存流的一個類。
緩存流是計算機領域中輸入輸出流的一種常見形式。包括BufferedInputStream/ BufferedOutputStream 類和BufferedReader/ BufferedWriter類。
BufferedReader從字元輸入流中讀取文本,緩衝各個字元,從而實現字元、數組和行的高效讀取。緩存流是過濾流,在創建具體流時需要給出一個InputStream / OutputStream 類型的流座位前端流,並可以指明緩衝區的大小。
擴展資料:
輸入輸出原理:
BufferedReader和BufferedWriter類各擁有8192個字元的緩衝區。當BufferedReader在讀取文本文件時,會先盡量從文件中讀入字元數據並放滿緩衝區,而之後若使用read()方法,會先從緩衝區中進行讀取。
如果緩衝區數據不足,才會再從文件中讀取,使用BufferedWriter時,寫入的數據並不會先輸出到目的地,而是先存儲至緩衝區中。如果緩衝區中的數據滿了,才會一次對目的地進行寫出。
BufferedReader字元流以字元為單位傳輸數據的流,輸入流程序可以從中讀取數據的流。
參考資料來源:百度百科-緩存流
參考資料來源:百度百科-java.io
JAVA中StringBuffer與StringBuilder、String的區別是什麼?
java中String、StringBuffer、StringBuilder是編程中經常使用的字元串操作類。
1.可變與不可變
String類中使用字元數組保存字元串,如下就是,因為有「final」修飾符,所以可以知道string對象是不可變的。
private final char value[];
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字元數組保存字元串,如下就是,可知這兩種對象都是可變的。
char[] value;
2.是否多線程安全
String中的對象是不可變的,也就可以理解為常量,顯然線程安全。
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字元串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。看如下源碼:
public synchronized StringBuffer reverse() {
super.reverse();
return this;
}
public int indexOf(String str) {
return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}
StringBuilder並沒有對方法進行加同步鎖,所以是非線程安全的。
3.StringBuilder與StringBuffer共同點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。
抽象類與介面的其中一個區別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重複寫已經存在的方法;而介面中只是對方法的申明和常量的定義。
StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(…)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。
最後,如果程序不是多線程的,那麼使用StringBuilder效率高於StringBuffer。
stringbuilder和stringbuffer的區別
1. 在執行速度方面的比較:StringBuilder StringBuffer
2. StringBuffer與StringBuilder,他們是字元串變數,是可改變的對象,每當我們用它們對字元串做操作時,實際上是在一個對象上操作的,不像String一樣創建一些對象進行操作,所以速度就快了。
3. StringBuilder:線程非安全的
StringBuffer:線程安全的
當我們在字元串緩衝去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
對於三者使用的總結:1.如果要操作少量的數據用 = String
2.單線程操作字元串緩衝區 下操作大量數據 = StringBuilder
3.多線程操作字元串緩衝區 下操作大量數據 = StringBuffer
Java SE使用StringBuffer和StringBuilder的時機有什麼不一樣?到底哪個更適合多線程的環境?
StringBuilder 和 StringBuffer 沒有硬性規定哪個用於多線程環境
他們都繼承 AbstractStringBuilder 抽象類
只是StringBuffer內部方法比StringBuilder的內部方法有同步處理
當多個線程操作一個StringBuffer對象時有同步操作保證數據的安全
比如在一些方法內的字元串拼接 一般都用StringBuilder 提高性能
沒有涉及到多線程訪問的地方都可以用StringBuilder
這需要你對多線程同步\Lock方面的知識多多了解
想知道這兩個類有什麼區別 在JDK安裝里的src.zip源碼里可以找到答案
Java中有很多輸入輸出類,為啥還要有個Buffer的輸入輸出類呢?有沒有Buffer的有啥差別?
Buffer的輸入輸出類是對流的一種封裝 ,封裝後可以提供一些高級方法使用更方便。就相當於一個工具,有工具能更省事更省力,不用當然沒問題。
沒有Buffer也是可以的,但是沒有Buffer處理起來就會麻煩一些。比如需要讀取一行,你當然可以讀取流的每個字元直到換行符,不過用Buffer的話一句readline就行了。
原創文章,作者:XFSC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149335.html