熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java程序性能優化-緩沖(Buffer)(2)[1]

2022-06-13   來源: Java高級技術 

    緩沖(Buffer)(

  其中個構造函數允許在應用層指定緩沖區的大小個構造函數將構造大小為K的緩沖區一般來說緩沖區不宜過小過小的緩沖區無法起到真正的緩沖作用緩沖區也不宜過大過大的緩存區會浪費系統內存增加GC負擔在本例中設置循環次數CIRCLE為若不使用緩沖區操作則相對耗時ms;而使用緩沖區的FileWriter僅相對耗時ms性能提升一倍

  另一個有用的緩沖組件是BufferedOutputStream在前文裝飾者模式一節中已經提到使用BufferedOutputStream可以包裝所有的OutputStream為其提供緩沖功能提高輸出流的效率和BufferedWriter類似它也提供了兩個構造函數

  public BufferedOutputStream(OutputStream out)

  public BufferedOutputStream(OutputStream out int size)

  第個構造函數可以指定緩沖區大小默認情況下和BufferedWriter一樣緩沖區大小為K

  此外在本書第章中還將詳細介紹JDK的NIO緩存NIO的Buffer類族提供了更為強大和專業的緩沖區控制功能有興趣的讀者可以仔細閱讀第章中的相關內容

  除了能夠改善I/O性能緩沖區對任何一種上下層組件存在性能差異的場合都可以起到很好的效果另一個典型的例子是使用緩沖區提升動畫顯示效果下例實現了一個左右平移的圓球

  public class NoBufferMovingCircle extends JApplet implements Runnable {

  Image screenImage = null;

  Thread thread;

  int x = ;

  int move = ;

  public void init() {

  screenImage = createImage(

  }

  public void start() {

  if (thread == null) {

  thread = new Thread(this)

  threadstart()

  }

  }

  public void run() {

  try {

  while (true)

  {

  x += move;

  if ((x > ) || (x < ))

  move *= ;

  repaint()

  Threadsleep(

  }

  } catch (Exception e) {

  }

  }

  public void drawCircle(Graphics gc) {

  GraphicsD g = (GraphicsD) gc;

  gsetColor(ColorGREEN)

  gfillRect(

  gsetColor(Colorred)

  gfillOval(x

  }

  public void paint(Graphics g) {             //畫一個圓

  gsetColor(Colorwhite)                    //這裡沒有緩沖

  gfillRect(

  drawCircle(g)

  }

  }

  以上代碼沒有main()函數但在Eclipse中可以通過右鍵菜單中Run As下的Java Applet運行結果顯示雖然程序可以完成紅球的左右平移但是效果較差因為每次的界面刷新都涉及圖片的重新繪制而這是較為費時的操作因此畫面的抖動和白光效果明顯為了能得到更優質的顯示效果可以為它加上緩沖區

[]  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27805.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.