国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java字符流緩沖區詳解

java字符流緩沖區詳解

2020-12-15 14:42珀伽 Java教程

這篇文章主要為大家詳細介紹了java字符流緩沖區的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java字符流緩沖區的具體方法,供大家參考,具體內容如下

1. 為什么要緩沖區?

程序頻繁地操作一個資源(如文件),則性能會很低,此時為了提升性能,就可以將一部分數據暫時讀入到內存的一塊區域中,以后直接從此區域中讀取數據即可,因為讀內存速度比較快,這樣提高性能。在IO中引入緩沖區,主要是提高流的讀寫效率。

2. 緩沖技術的原理?

總的來說,緩沖區就是內存里的一塊區域,把數據先存內存里,然后一次性寫入,類似數據庫的批量操作,這樣效率比較高

3. BufferedWriter類

①. 定義

?
1
public class BufferedWriter extends Writer

將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入。

②. 常用的方法:

?
1
2
3
4
5
6
7
8
9
10
// 關閉此流,但要先刷新它,實際上調用了Writer類的close方法
public void close() throws IOException
// 刷新該流的緩沖
public void flush() throws IOException
// 寫入一個行分隔符。行分隔符字符串由系統屬性 line.separator 定義
public void newLine() throws IOException
// 寫入字符數組的某一部分
public void write(char[] cbuf, int off, int len) throws IOException
// 寫入單個字符
public void write(int c) throws IOException

4. BufferedReader類

①.定義:

?
1
public class BufferedReader extends Reader

從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取。

②. 常用的方法:

?
1
2
3
4
5
6
7
8
// 關閉該流并釋放與之關聯的所有資源
public void close() throws IOException
// 讀取一個文本行。通過下列字符之一即可認為某行已終止:換行 ('\n')、回車 ('\r') 或回車后直接跟著換行
public String readLine() throws IOException
// 將字符讀入數組的某一部分
public int read(char[] cbuf, int off, int len) throws IOException
// 讀取單個字符
public int read() throws IOException

范例:通過緩沖區復制一個文本文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
File source = new File("Demo.txt");
if (!source.exists()) {
  return;
}
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
try {
  bufferedReader = new BufferedReader(new FileReader(source));
  bufferedWriter = new BufferedWriter(new FileWriter("Demo_copy.txt"));
  String line = null;
  while ((line = bufferedReader.readLine()) != null) {
    bufferedWriter.write(line);
    bufferedWriter.newLine();  // 換行
    bufferedWriter.flush();   //將緩沖區數據刷到指定文件中
  }
} catch (Exception e) {
  throw new RuntimeException("文件復制失敗!");
} finally {
  // 關閉 bufferedWriter 和 bufferedReader
}

5.緩沖區原理圖解

java字符流緩沖區詳解

6.根據原理圖,自定義緩沖類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class MyBufferedRead extends Reader{ <br>  /**
   * 緩沖區在定義時被緩沖的流對象
   */
  private Reader read;
 
  private char[] buffer = new char[1024];
  // 用于記錄存儲到緩沖區中字符個數的變量
  private int count = 0;
  // 用于操作數據中元素的角標
  private int pos = 0;
 
  public MyBufferedRead(Reader read) {
    this.read = read;
  }
 
  /**
   * 定義一個讀取方法,從緩沖區中讀取一個字符
   */
  public int myRead() throws IOException {
    // 讀取一批數據到緩沖數據buffer中
    if (count == 0) {
      count = read.read();
      pos = 0;
    }
 
    if (count < 0)
      return -1;
 
    char ch = buffer[pos];
    pos++;
    count--;
    return ch;
  }
 
  /**
   * 定義一個讀取一行的方法
   */
  public String myReadLine() throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    int ch = 0;
    while ((ch = read.read()) != -1) {
      // 如果遇到此字符,則繼續
      if (ch == '\r') {
        continue;
      }
      // 如果遇到此字符,表示該行讀取結束
      if (ch == '\n') {
        return stringBuilder.toString();
      }
      // 將該行的字符添加到容器
      stringBuilder.append((char) ch);
    }
    // 如果讀取結束,容器中還有字符,則返回元素
    if (stringBuilder.length() != 0) {
      return stringBuilder.toString();
    }
    return null;
 
  }
 
  /**
   * 關閉緩沖區
   */
  public void myClose() throws IOException {
    read.close();
  }
 
  @Override
  public int read(char[] cbuf, int off, int len) throws IOException {
    return 0;
  }
 
  @Override
  public void close() throws IOException {
  }
}

測試自定義緩沖類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class MyBufferedReadDemo {
  /**
   * BufferedReader 方式的read方法
   */
  @Test
  public void bufferedDemo() throws IOException{
    FileReader fileReader = new FileReader("JAVA專業術語集.txt");
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    int ch = 0;
    while ((ch = bufferedReader.read()) != -1) {
      System.out.print((char) ch);
    }
    // 關閉 bufferedReader
    bufferedReader.close();
  }
   
  /**
   * 自定義MyBufferedRead類的myRead方法
   */
  @Test
  public void myBufferedDemo() throws IOException{
    FileReader fileReader = new FileReader("JAVA專業術語集.txt");
    MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader);
    int ch = 0;
    while ((ch = myBufferedRead.myRead()) != -1) {
      System.out.print((char) ch);
    }
    myBufferedRead.myClose();
  }
   
  /**
   * BufferedReader 方式的readLine方法
   */
  @Test
  public void readLineDemo() throws IOException{
  FileReader fileReader = new FileReader("JAVA專業術語集.txt");
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {
      System.out.println(line);
    }
    bufferedReader.close();   
  }
   
  /**
   * 自定義MyBufferedRead類的myReadLine方法
   */
  @Test
  public void myReadLineDemo() throws IOException{
    FileReader fileReader = new FileReader("JAVA專業術語集.txt");
    MyBufferedRead myBufferedRead = new MyBufferedRead(fileReader);
    String line = null;
    while ((line = myBufferedRead.myReadLine()) != null) {
      System.out.println(line);
    }
    myBufferedRead.myClose();  
  }
}

①問題:上面有一個范例------緩沖區復制一個文本文件,怎么讓復制后每行帶有行標?
回答:

要實現此功能,最方便的是使用LineNumberReader,下面我們看下這個類

此類的定義:

?
1
public class LineNumberReaderextends BufferedReader

跟蹤行號的緩沖字符輸入流。此類定義了方法 setLineNumber(int) 和 getLineNumber(),它們可分別用于設置和獲取當前行號。
實現上面功能程序代碼如下:

?
1
2
3
4
5
6
7
8
9
FileReader fileReader = new FileReader("tempFile\\demo.java");
LineNumberReader lineNumberReader = new LineNumberReader(fileReader);
String line = null;
// 設置開始行號
lineNumberReader.setLineNumber(10);
while ((line = lineNumberReader.readLine()) != null) {
  System.out.println(lineNumberReader.getLineNumber() + "\t" + line);
}
lineNumberReader.close();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/qq_25583079/article/details/48436075

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色在线观看网站 | 色站综合 | 最新国产精品精品视频 | 久久草视频 | 日韩精品一区二区三区av | 91久久艹| 激情五月综合网 | 亚洲精品久久久久久国产精华液 | 国产一区二区亚洲 | 精品一区二区三区免费毛片爱 | 人人爽人人爽人人片av | 亚洲天堂免费在线 | 国产精品久久久久久久 | 国产在线一区二区 | 精品黑人一区二区三区久久 | 亚洲免费视频网站 | 久久一区二区三 | 亚洲欧美精品一区二区 | 欧美黑人一级爽快片淫片高清 | 一级黄色录像在线观看 | 国产精品视频观看 | 免费看黄a| 欧美xo影院| 在线观看免费黄色 | 国产精品网站在线看 | 国产精品久久久久久中文字 | 免费一级毛片在线播放放视频 | 欧美精品免费在线 | 成人黄色在线 | 夜夜操导航 | 精品国产一区二区三区在线观看 | av在线中文播放 | 欧美一级二级三级 | 日韩欧美国产一区二区三区 | 国产日韩精品一区二区 | 一区二区三区高清在线 | 欧美在线视频一区 | 色婷婷国产精品综合在线观看 | 精品国产乱码久久久久久影片 | 日韩久色 | 一区视频 |