您的位置:

java中的buffer抽象类,Java中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 }

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就行了。