1. 程式人生 > >_056_緩衝輸入輸出字元流

_056_緩衝輸入輸出字元流

===================

BufferedReader字元緩衝類 這個和之前的BufferedInputStream(緩衝輸入位元組流)不一樣,因為BufferedInputStream看起來沒什麼用 只是內部維護了一個數組而且,這個我們自己定義一個數組也可以實現,而且比它的效率還高 但是BufferedReader不僅僅如此,它即提高了效率,也有一個擴充套件功能

緩衝輸出字元流有一個擴充套件的方法 那麼就是newLine,具有換行的作用

public class Test2
{
	public static void main(String[] args) throws IOException
	{
		test2();
	}

	// 使用傳統方式讀取
	public static void test1() throws IOException
	{
		File file1 = new File("D:\\download\\document\\temp.txt");
		FileReader fid = new FileReader(file1);
		BufferedReader bufferedReader1 = new BufferedReader(fid);
		StringBuilder sbd_1 = new StringBuilder();
		char[] arr = new char[1024];
		int length = 0;
		while ((length = bufferedReader1.read(arr)) != -1)
		{
			sbd_1.append(arr, 0, length);// 必須要長度,不然後面的那些空的陣列也會新增進來
		}
		System.out.println(sbd_1);
	}

	// 使用BufferedReader的readline讀,推薦
	public static void test2() throws IOException
	{
		File file1 = new File("D:\\download\\document\\temp.txt");
		FileReader fid = new FileReader(file1);
		BufferedReader bufferedReader1 = new BufferedReader(fid);
		String contant = null;
		while ((contant = bufferedReader1.readLine()) != null)
		{
			System.out.println(contant);
		}

	}

	// 下面是自寫readLine
	public static String myReadLine(FileReader fileReader) throws IOException
	{
		int value = 0;
		StringBuilder stringBuilder1 = new StringBuilder();
		while ((value = fileReader.read()) != -1)
		{
			if (value == '\r')
			{
				continue;
			} else if (value == '\n')
			{// 主要是靠這裡出去
				break;
			} else
			{
				stringBuilder1.append((char) value);
			}

		}

		if (value == -1)
		{// 如果到了這裡,說明整個文字都被讀完了,因為我們沒有方法可以判斷文字已經讀完,就是說如果我們要迴圈遍歷全部的行
			// 必須要給一個文字結束的條件,而read剛剛好就是一個判斷文字是否結尾的方法
			return null;
		}

		return stringBuilder1.toString();// 既然到了這裡,那麼說明value是等於'\n'

	}
}