亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDK1.4新特性之I/O APIs篇

2019-11-18 11:55:49
字體:
來源:轉載
供稿:網友

  前些天碰到比爾,你看他皺著眉頭,一定又碰到了什么難題。一問,還真讓我猜中了。原來,比爾對java中的一些新概念還不太理解,不知道該怎么用。其實,碰到什么難題,可以去找人問,和別人討論嘛。于是我把比爾領到了“開發者聯盟”,相信他會在那得到“前輩”的幫助.現在,就讓我們來看看,比爾究竟碰到了什么難題。
  
  了解Java的人一定對于Java中的I/O APIs很熟悉,這里不想對此多費口舌,而是希望向大家介紹一下JDK1.4中新的I/O APIs,讓大家都能了解這些新特性,盡早用最先進的裝備來武裝自己,以免豪華的法拉利跑車總是跑在痛苦的泥濘路上。
  
  當然閱讀本文之前,你最好先了解一下原有的Java I/O APIs。
  新在何處
  任何新事物的出現,都是對舊事物的一種修正和改進,從而使其更加方便可用,在J2SE v1.4中出現的新I/O(NIO) APIs亦是如此,主要是針對那些舊的I/O APIs不能解決或者解決起來很麻煩的問題。這些新特性主要體現在以下幾個方面:
  · 更加靈活的可伸縮的I/O接口(scalable I/O),包括I/O抽象Channels的出現以及新的多元的(multiplexed),非阻塞(non-blocking)的I/O機制。這使得構建產品級的應用服務更加方便靈活,使你能夠輕松應付成千上萬個開放的連接,并且可以有效地利用多個處理器。
  
  · 快速緩存(fast buffered)的二進制和字符I/O接口。快速緩存的二進制I/O API使得你可以很輕易地編寫出操作文件流或者二進制數據流的高性能代碼。而快速緩存的字符I/O API使得你可以更加高效地處理字符流和文件,此外它還將正則表達式引入到Java平臺中來格式化你的輸入輸出。
  
  · 字符集的編碼器和解碼器(Character-set encoders and decoders)。這些字符集轉換API使得我們可以直接訪問操作系統內置的字符集轉換器,同時還支持那些外來的轉化器。
  
  · 基于Perl風格正則表達式的模式匹配機制(A pattern-matching facility based on Perl-style regular eXPRessions)。
  
  · 改良的文件系統接口,支持鎖定和內存映射(locks and memory mapping)。該特性使得你可以更加輕易地處理各種文件系統操作中出現的問題,同時使得你可以更加高效地訪問大量的文件屬性集。此外假如你確實需要,你還可以訪問與平臺相關的一些特性。最后,它還提供對非本地文件系統的支持,比如網絡文件系統(network filesystems)。
  
  · 新的I/O違例類可以使你更加有針對性地來處理各種I/O錯誤,讓你能夠在各種平臺上一致地來對待這些錯誤。
  
  · 增加了對并發的支持,NIO類中的大部分方法都支持多個并發的線程。
  新的包(packages),類(classes)和接口(interfaces)
  為了實現上面提到的那些功能,在Java JDK1.4中新增加以下這些部分來提供支持:
  · java.nio包:主要是和Buffers有關的一些類
  · java.nio.channels包:主要包括Channels和selectors
  
  · java.nio.charset包:和字符集有關的類
  
  · java.nio.channels.spi包:提供channels服務的類
  
  · java.nio.charset.spi包:提供charsets服務的類
  
  · java.util.regex包:主要是利用正則表達式進行模式匹配的類
  
  · java.lang.CharSequence接口:主要是為java.util.regex包中的一些方法提供一個統一的接口。類String,StringBuffer,java.nio.CharBuffer都重新實現了該接口。
  
  除了這些新增加的類以外,許多原有的類和接口也做了相應的改變。比如FileInputStream和FileOutputStream類中的getChannel、close方法,RandomaccessFile中的getChannel方法等。(1)
  幾點說明
  這些新的I/O APIs的推出,并不意味著原有的I/O APIs的廢棄,盡管我們提倡以后盡量使用NIO APIs中的特性。另外,雖然這些NIO APIs都希望做到完全的平臺無關性,但是由于I/O工作的非凡性,有些特性還是對操作系統和硬件平臺有很大的依靠性,比如可升級的I/O API(scalable I/O API),二進制I/O API(binary I/O API)和新的文件系統接口(new filesystem interface)。所以我們以后在利用這些NIO APIs的時候,應當盡量減少本地代碼的部分,做到最大限度的可移植性。
  一些例子
  
  
  介紹完這些新特性以后,我想大家都迫切希望能夠通過具體的實例來看看它們具體的用法,可不能光說不練。但是,要知道整個NIO APIs涵蓋太大的范圍,要一個個完整地講解它們可能需要一本厚厚的書。所以我們今天只想通過一個典型的例子來做一個引導性的講解,更多的工作需要大家以后在具體的實際編程過程中慢慢學習。
  
  為了方便,我將直接采用Sun Java的例子程序,這個例子包括兩個文件:TimeQuery.java和TimeServer.java。前者可以向一系列主機查詢時間,后者監聽連接并且告訴呼叫者確切的時間。這是個演示NIO socket channels,緩存治理(buffer handling),字符集和正則表達式的很好的例子。(2)
  
  首先,讓我們來看看TimeServer.java(具體代碼見清單一)。該程序首先檢查參數是否是一個數字串,注重這里模式匹配的用法。
  
  if ((args.length == 1) && Pattern.matches("[0-9]+", args[0]))
   port = Integer.parseInt(args[0]);
  
  
  
  接著在方法setup()中,調用類ServerSocketChannel的靜態方法open()建立一個server-socket channel,此時它還并沒有和具體的主機和端口綁定起來,此時我們需要利用到相關聯的server socket的bind()方法,server socket可以用類ServerSocketChannel的socket()方法得到。
  
  ServerSocketChannel ssc = ServerSocketChannel.open();
  InetSocketAddress isa
   = new InetSocketAddress(InetAddress.getLocalHost(), port);
  ssc.socket().bind(isa);
  
  
  
  最后,監聽服務請求的任務在方法serve()中實現。首先,調用類ServerSocketChannel的方法accept()接受連接并返回一個SocketChannel對象,接著調用該對象的write()方法向channel中寫入數據。注重在數據寫入之前對它的處理過程。
  
  SocketChannel sc = ssc.accept();
   String now = new Date().toString();
   sc.write(encoder.encode(CharBuffer.wrap(now + "/r/n")));
  /********************清單一:TimeServer.java完整的程序清單********************/
  /*
   * @(#)TimeServer.java 1.3 01/12/13
   * Listen for connections and tell callers what time it is.
   * Demonstrates NIO socket channels (accepting and writing),
   * buffer handling, charsets, and regular expressions.
   *
   * Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved.
   */
  import java.io.*;
  import java.net.*;
  import java.nio.*;
  import java.nio.channels.*;
  import java.nio.charset.*;
  import java.util.*;
  import java.util.regex.*;
  public class TimeServer
  {
   // We can't use the normal daytime port (unless we're running as root,
   // which is unlikely), so we use this one instead
   private static int PORT = 8013;
   // The port we'll actually use
   private static int port = PORT;
   // Charset and encoder for US-ASCII
   private static Charset charset = Charset.forName("US-ASCII");
   private static CharsetEncoder encoder = charset.newEncoder();
   // Direct byte buffer for writing
   private static ByteBuffer dbuf = ByteBuffer.allocateDirect(1024);
   // Open and bind the server-socket channel
   //
   private static ServerSocketChannel setup() throws IOException
   {
   ServerSocketChannel ssc = ServerSocketChannel.open();
   InetSocketAddress isa
   = new InetSocketAddress(InetAddress.getLocalHost(), port);
   ssc.socket().bind(isa);
   return ssc;
   }
   // Service the next request to come in on the given channel
   //
   private static void serve(ServerSocketChannel ssc) throws IOException
   {
   SocketChannel sc = ssc.accept();
   try
   {
   String now = new Date().toString();
   sc.write(encoder.encode(CharBuffer.wrap(now + "/r/n")));
   System.out.println(sc.socket().getInetAddress() + " : " + now);
   sc.close();
   }
   finally
   {
   // Make sure we close the channel (and hence the socket)
   sc.close();
   }
   }
  
   public static void main(String[] args) throws IOException
   {
   if (args.length > 1)
   {
   System.err.println("Usage: java TimeServer [port]");
   return;
   }
  
   // If the first argument is a string of digits then we take that
   // to be the port number
   if ((args.length == 1) && Pattern.matches("[0-9]+", args[0]))
   port = Integer.parseInt(args[0]);
  ServerSocketCh

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲日韩欧美视频一区| 米奇精品一区二区三区在线观看| 亚洲图片制服诱惑| 欧美精品久久久久久久久久| 日韩欧美福利视频| 国产精品wwwwww| 国产精品福利观看| 久久在线观看视频| 亚洲女人被黑人巨大进入| 欧美性猛交xxxx免费看久久久| 国产69精品久久久久9| 国产一区二区三区久久精品| 精品爽片免费看久久| 亚洲综合av影视| 亚洲欧美国产高清va在线播| 8x拔播拔播x8国产精品| 欧美日韩在线免费观看| 亚洲国产美女久久久久| 欧美日韩国产区| 午夜伦理精品一区| 日韩中文在线观看| 伦伦影院午夜日韩欧美限制| 欧美日韩福利电影| 欧美高清电影在线看| 日本精品视频在线播放| 尤物yw午夜国产精品视频明星| 成人免费福利视频| 亚洲欧洲黄色网| 久久久久久中文| 亚洲成人av中文字幕| 91黑丝高跟在线| 欧美午夜精品久久久久久久| 国产成人精品最新| 欧美成aaa人片免费看| 91国偷自产一区二区三区的观看方式| 日韩中文在线视频| 日韩电影在线观看免费| 亚洲视频在线免费看| 亚洲男人天堂古典| 日韩欧美在线视频日韩欧美在线视频| 成人夜晚看av| 欧美日韩国产精品一区| 伊是香蕉大人久久| 影音先锋欧美精品| 自拍亚洲一区欧美另类| 亚洲国产91精品在线观看| 日韩激情第一页| 国产精品678| 中文字幕国产精品| 欧美大片欧美激情性色a∨久久| 国产午夜精品视频| 尤物yw午夜国产精品视频| 国产欧美日韩亚洲精品| 欧美性极品xxxx娇小| 国产亚洲aⅴaaaaaa毛片| 亚洲精品电影在线观看| 国产成人福利网站| 欧美大胆在线视频| 亚洲人永久免费| 欧美做受高潮电影o| 欧美激情一区二区三区在线视频观看| 精品视频久久久久久| 欧美一级成年大片在线观看| 国产原创欧美精品| 日韩hd视频在线观看| 国产亚洲综合久久| 欧美重口另类videos人妖| 亚洲欧美日韩成人| 欧美性猛交丰臀xxxxx网站| 亚洲精品免费一区二区三区| 亚洲欧美日韩高清| xxav国产精品美女主播| 俺去了亚洲欧美日韩| 国产网站欧美日韩免费精品在线观看| 亚洲美女性生活视频| 色诱女教师一区二区三区| 26uuu亚洲伊人春色| 国产日韩在线精品av| 欧美在线性爱视频| 国产精品美女呻吟| 日本中文字幕久久看| 亚洲欧洲美洲在线综合| 国产精品亚洲精品| 国产成+人+综合+亚洲欧洲| 国产精品夜色7777狼人| 亚洲自拍另类欧美丝袜| 欧美性猛交99久久久久99按摩| 欧美影院在线播放| 亚洲国产中文字幕久久网| 国内精品小视频在线观看| 国产a级全部精品| 亚洲国内精品视频| 国产精品h在线观看| 国产精品久久久久9999| 在线观看欧美日韩| 午夜精品视频网站| 91精品久久久久久久| 成人国产精品av| 欧美亚洲激情在线| 色中色综合影院手机版在线观看| 亚洲国产成人精品女人久久久| 欧美最猛性xxxxx(亚洲精品)| 91av视频导航| 中文字幕精品影院| 中文字幕亚洲欧美日韩高清| 亚洲精品久久久久国产| 精品无人区乱码1区2区3区在线| 欧美成人免费大片| 日韩精品久久久久久久玫瑰园| 91精品美女在线| 国产欧美精品一区二区三区-老狼| 国产丝袜精品第一页| 国产精品老牛影院在线观看| 色综合久久悠悠| 国产第一区电影| 国产在线不卡精品| 91最新国产视频| 日韩视频―中文字幕| 欧美精品www在线观看| 成人有码在线播放| 久久久久这里只有精品| 久久6精品影院| 5278欧美一区二区三区| 日本亚洲欧美三级| 精品毛片网大全| 成人免费自拍视频| 亚洲精品久久久久久久久久久| 亚洲999一在线观看www| 欧美一级高清免费播放| 日韩女优人人人人射在线视频| 欧美精品在线看| 久久久久这里只有精品| 欧美一级电影免费在线观看| 97成人超碰免| 最近2019免费中文字幕视频三| 91地址最新发布| 欧美在线国产精品| 亚洲一区二区三| 隔壁老王国产在线精品| 国产成人aa精品一区在线播放| 久久这里只有精品99| 日韩免费视频在线观看| 亚洲国产精品va在线看黑人动漫| 国产成人精品电影| 日韩欧美在线播放| 精品欧美激情精品一区| 精品成人国产在线观看男人呻吟| 欧美日韩在线一区| 亚洲xxxx做受欧美| 亚洲国产成人久久综合一区| 欧美一级高清免费| 中文字幕亚洲欧美一区二区三区| 91精品国产91久久久久久| 国产精品一区二区久久| 国产日韩欧美在线播放| 91九色蝌蚪国产| 日韩在线免费观看视频| 在线性视频日韩欧美| 热re99久久精品国产66热| 日韩影视在线观看| 日韩在线中文字| 精品国产精品自拍| 亚洲视频axxx| 久久天天躁狠狠躁夜夜爽蜜月|