美文网首页
StringBuffer and IOStream 1

StringBuffer and IOStream 1

作者: Zeller | 来源:发表于2016-04-26 17:13 被阅读39次

    April 26th

    StringBuffer

    • stringBuffer 源码分析
    append方法 ensureCapacityInternal

    如果传入的minimumCapacity 还是不够的话执行 expandCapacity 方法

    expandCapacity

    扩充为原来的两倍+2,默认容量是16

    StringBuffer sb=new StringBuffer(24);指定的容量越接近要存储的数据越好。需要注意的是它扩充的次数越多,也会影响它的性能

    • 这里有一篇区分String与StringBuffer的文章

    String与StringBuffer的区别

    String 不是简单类型,而是一个类,它被用来表示字符序列。字符本身符合 Unicode 标准,其初始化方式有两种。
    如:String greeting=“Good Morning! \n”;
    String greeting=new String(=“Good Morning! \n”);
    String的特点是一旦赋值,便不能更改其指向的字符对象,如果更改,则会指向一个新的字符对象 。
    StringBuffer是一个具有对象引用传递特点的字符串对象。
    StringBuffer对象可以调用其方法动态的进行增加、插入、修改和删除操作,且不用像数组那样事先指定大小,从而实现多次插入字符,一次整体取出的效果,因而操作字符串非常灵活方便。
    一旦通过StringBuffer生成最终想要的字符串,就可调用它的toString方法将其转换为一个String对象

    StringBuffer类 StringBuffer的兄弟StringBuilder:

    • 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设 计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候.
    • 同步一个在用宁外一个就得等,不同步的大家可以一起用,StringBuffer同步的(synchronized)效率慢但线程安全,
      StringBuilder不同步的效率高,但线程不安全,不能用在多线程访问的时候

    IOStream

    用到了递归的算法

    字节输出流,从程序向文件输出数据

    字节输出流,从程序向文件输出数据
    OutputStream out =new FileOutputStream(file,true);
    

    加true实在后面追加,没有true是进行覆盖

    字节输入流,从文件向程序输入数据

    /*
    *字节输入流,从文件向程序输入数据
    */
    public static void read(){
      File file=new File("c:\\a.txt");
      try{
       //针对文件创建一个输入流
       InputStream in=new FileInputStream(file);
       byte[] bytes=new byte[1024*1024*10];//定义一个10MB的字节数组
       int len=-1;
       StringBuffer buf=new StringBuffer();
       while((len=in.read(bytes))!=-1){
         buf.append(new String(bytes,0,len));
       }
        in.close();//关闭
        System.out.println(buf.toString());
        }catch(IOException e){
          e.printStackTrace();
     }
    }
    

    相关文章

      网友评论

          本文标题:StringBuffer and IOStream 1

          本文链接:https://www.haomeiwen.com/subject/nnoqrttx.html