کلاس BufferedWriter

همانطور که می دانیم کلاس های Writer برای نوشتن استریم های متنی به کار می روند ، با استفاده از کلاس BufferedWriter می توانیم عمل نوشتن را با تکنیک بافر کردن سریعتر سازیم ، این کلاس ابتدا داده ها را در یک بافر در حافظه اصلی نگه داری می کند و پس از هر بار پر شدن بافر آن ها را به صورت گروهی و یک جا در جریان خروجی می نویسد که این عمل سرعت نوشتن در جریان خروجی را به شدت افزایش می دهد. برای استفاده از این کلاس باید از یکی از سازنده های زیر برای ساخت شی جدید از آن استفاده کنیم :

BufferedWriter (Writer out)
BufferedWriter (Writer out,int bufferSize)

متد های پر کاربرد BufferedWriter در جدول زیر آمده است:

متد کاربرد
close () جریان خروجی را بسته و منابع استفاده شده را آزاد می کند
flush() داده های بافر شده در حافظه را در استریم خروجی ارسال می کند.
voir write(char c) کاراکتر c را در استریم خروجی می نویسد.
write(char[] cbuf) آرایه ای از کاراکتر ها را در استریم خروجی می نویسد.
write(char[] cbuf,offset,length) قسمتی از آرایه cbuf را با شروع از اندیس offset به تعداد lenght کاراکتر در استریم خروجی می نویسد.
write(String str,offset,length) مشابه متد قبلی است با این تفاوت که به جای آرایه ای از کاراکتر ها از یک String استفاده می کند.
write(String s) یک رشته متنی را در استریم خروجی می نویسد.
newLine() یک جدا کننده خطوط در استریم خروجی می نویسد.

نوشتن در فایل

مثال زیر یک متن آزمایشی را با فرمت UTF-8 در فایل Test.txt ذخیره می کند.

import java.io.*;

public class BufferedWriterDemo
{
    public static void main(String[] args)
    {
        try
        {
            File myFile = new File("E:\\Test.txt");
            FileOutputStream fileoutputstream = new FileOutputStream(myFile);
            OutputStreamWriter outputstreamwriter = new OutputStreamWriter(fileoutputstream, "UTF-8");

            BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

            bufferedwriter.write("Hello BufferedWriter");
            bufferedwriter.newLine();
            bufferedwriter.write("Second Line");
            bufferedwriter.newLine();
            bufferedwriter.write("Third Line");

            bufferedwriter.flush();
            bufferedwriter.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

در مثال بالا ابتدا یک شی از کلاس File ایجاد می کنیم و سپس با استفاده از FileOutputStream یک جریان خروجی (fileoutputstream ) بر روی آن ایجاد می کنیم ، سپس یک OutputStreamWriter از روی fileoutputstream ایجاد می کنیم تا بتوانیم به صورت کاراکتری بر روی جریان خروجی بنویسیم(شی outputstreamwriter) ، در نهایت از روی outputstreamwriter یک BufferedWriter ایجاد می کنیم تا مطمئن شویم عمل نوشتن با سرعت زیادی انجام می شود ، در ادامه کد با استفاده از متد های write و newLine بر روی bufferedwriter می نویسم.