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

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

Java數據流——企業級數據流分析(組圖)

2019-11-18 12:24:00
字體:
來源:轉載
供稿:網友

  輸入輸出流的概念在java 1.0中首次被引入。與多媒體流不同,Java數據流以一種標準的方式進行工作,將數據寫入目的地和從源讀取數據。如:文件,套接字,甚至鍵盤和屏幕(System.in和System.out)都是作為可以用輸入輸出流進行通訊的源和目的的普通的例子。實際上,一些對象,如套接字,可以同時既是目的也是源。
  
  Java消息服務是企業級應用在一個分布式的環境中相互通訊的標準方式。雖然這是一個眾所周知并大量驗證的方法,但是它是復雜的和有時顯得很粗笨的消息驅動框架,它缺少了一些簡單的流框架就可以提供的能力。MantaRay,一個開源的數據消息項目(JMS提供者),基于點對點,無服務端的架構,它通過融合了JMS和數據流兩者的優點來解決上述的問題。
  
  這篇文章將會討論隱藏在流概念中的能力和由MantaRay開源項目開發的企業級數據流,一種新型的流,它的目的地和源是JMS的topic和queue。
  
  輸入輸出流的能力
  
  概括

  
  流的最重要的能力特性在于,無論目的和源是什么,通訊API始終保持一致。寫入一個套接字和寫入一個文件是一樣的。一個FileOutputStream對象可以專門為文件的操作提供額外的功能,但基礎的讀寫仍然是一樣的。結果是假如你不使用額外的功能,那么你就可以簡單的替換掉源/目的而不需要改變你的代碼。
  
  圖1顯示了流是如何使用的
  
 Java數據流——企業級數據流分析(組圖)(圖一)
  圖1.使用流

  
  針對每種目的的流API是相同的和很原始的。舉例,InputStream類的read()方法的返回值是一個在0-255之間的int。出于這個原因,Java提供了一組寫入這些流更多復雜數據的工具。這些工具包括像writer和reader這樣的幫助類,也有包裝原始流的包裝流。這些工具將在下一節討論。
  
  流交換和改變
  
  另一個強大的特性是在一個流之上包裝另一個流。假如你想寫數據到一個文件但希望數據是被壓縮的,你只需簡單地創建一個FileOutputStream對象并將它包裝在一個ZipOutputStream對象內。然后你寫數據到ZipOutputSream,它會壓縮數據并將它傳遞給FileOutputStream,它會將其寫入到一個物理文件中。類似的,你可以使用FileInputStream和ZipInputStream對象從一個.zip文件中讀出內容。
  
  實際上,你可以將多個流鏈接起來。比如,你可將一個SocketOutputStream包裝在一個CipherOutputStream對象內用來加密數據,再包裝在一個ZipInputStream對象內用來壓縮數據。當數據從一個流傳遞到另一個流時, 每一個對象都在數據上進行自己的操作。
  
  圖2顯示了包裝流的一個例子
  
 Java數據流——企業級數據流分析(組圖)(圖二)
  圖2.包裝流

  
  MantaRay的企業級流
  
  為什么需要企業級流?

  
  與大多數流工作于物理的IO組件不同,MantaRay企業級流工作于JMS的隊列(queue)和主題(topic)之上。JMS是通過隊列和主題傳遞消息的一個面向消息的標準,通常用在企業級應用環境中。
  
  舉例來說,讓我們看看兩個想通過隊列來進行通訊的應用。一個應用向隊列中發送一條消息,另一個應用則接收這條消息。下面的代碼演示了這一過程,使用JMS 1.02實現。
  
  // 發送代碼:javax.jms.QueueConnectionFactory conFactory = new
  ...
  // look up in JNDI or create an instance
  // 在JNDI中查找或創建一個實例javax.jms.QueueConnection con
  = conFactory.createQueueConnection();
  // 創建一個非事務的自動確認的sessionjavax.jms.QueueSession sendSession
  = con.createQueueSession(false
  ,Session.AUTO_ACKNOWLEDGE);javax.jms.Queue sendQueue
  = sendSession.createQueue (sQueue);javax.jms.QueueSender sender
  = sendSession.createSender(sendQueue);javax.jms.TextMessage msg
  = sendSession.createTextMessage();msg.setText( "some text" );sender.send( msg,
  javax.jms.DeliveryMode.NON_PERSISTENT,
  javax.jms.Message.DEFAULT_PRIORITY,MESSAGE_TTL);
  // 接收代碼:javax.jms.QueueConnectionFactory conFactory = new ...
  // 在JNDI中查找或創建一個實例javax.jms.QueueConnection con
  = conFactory.createQueueConnection();
  // 創建一個非事務的自動確認的sessionjavax.jms.QueueSession receiveSession
  = con.createQueueSession(false
  ,Session.AUTO_ACKNOWLEDGE);javax.jms.Queue receiveQueue
  = receiveSession.createQueue (rQueue);javax.jms.QueueReceiver qReceiver
  = receiveSession.createReceiver(receiveQueue);javax.jms.TextMessageMessage
  =(TextMessageMessage) qReceiver.receive();
  
  正如你所看到的,不僅代碼有點復雜,而且它也是面向消息而非面向流的。當一個用戶向企業級流中寫入數據時,流會將數據剪切成包并將他們包裝到一個JMS消息中。然后將消息發送到預設的隊列或主題中,那里消息將被作為輸入流處理,解包數據,并為目的端用戶作好讀取的預備。
  
  圖3 顯示了數據是如何在MantaRay企業級流中被處理的。
  
 Java數據流——企業級數據流分析(組圖)(圖三)
  圖3.MantaRay企業級流中數據處理的過程

  
  因為企業級流擴展了InputStream和OutputStream對象,就象一個套接字或文件的Input/OutputStream做的那樣,你可以將它們像流一樣使用,從而釋放出流所特有的能力。
  
  ·因為提供了所有流可以共享的接口,所以它們使用起來非常簡單。
  ·你可將它們與其它流包裝在一起從而獲得如壓縮和加密那樣的擴展功能。
  ·你不用擔心將數據拆分包,緩存的分配或其它的低層次的針對數據傳遞的問題
  
  使用企業級流
  
  JMS隊列都是點對點的通訊。當在一個隊列上使用企業級流時,在同一個隊列上應該只有一個輸出流和一個輸入流。雖然大多數的JMS提供者,包括MantaRay,在同一個隊列上啟用了多個生產者和消費者,但這并沒有在JMS標準中定義,因此當在一個隊列上使用企業級流時,這就是一種誤用。原因在于,特定隊列上的一條消息只能傳遞給一個消費者;因此,假如有多個消費者,將會‘偷’走其它人的消息。
  
  JMS主題定義了多對多的通訊。當企業級流使用一個主題用作源或目的時,同一個主題只能有一個發布者,同時可以有多個訂閱者。原因在于,同一個主題上的多個發布者只會攪亂數據,并向訂閱者發送無意義的輸出。
  
  但是,實事上基于主題的可以有多個訂閱者,可以使用類似廣播的一對多的通訊。輸出流的用戶不需要為每一個對端治理一個輸出流。而是,用戶只需簡單地將數據發送到輸出流中,那么所有的主題訂閱者將會收到消息。
  
  企業級流使用connect方法來綁定到一個主題或隊列上。只有當流聯接以后,你才能從中寫入或讀取?;陉犃械牧鳎敵隽鳟a生的數據存放在隊列中,直到有輸入流來‘消費’它。因為有存儲數據的能力,聯接的順序是不重要的。輸出流可以聯接后送入數據,輸入流則可以在任何時候聯接,并取走從頭開始的所有數據。使用主題作為輸入流時有些不同,主題只能收到當它聯接以后產生的數據。雖然這在某些情況下并不是個問題(比如,一個持續的CPU使用報告),但在某些情況下卻很重要(比如,文件傳輸)。
  
  MantaRay企業級流示例
  
  提供—閱讀式圖表

  
  考慮一個圖型數據提供者組件,它產生持續的數據—可以是內存使用率,股票價格,工廠輸出或是地球上某一時刻火星人的數目。這種數據需要顯示在一個叫做圖表閱讀器的幾個不同的位置。
  
  因為數據是持續的并且通訊是一對多的類型,這個任務可以被MantaRay企業級流輕松的解決。
  
  圖4顯示了圖表閱讀器組件
  
 Java數據流——企業級數據流分析(組圖)(圖四)
  圖4.圖表閱讀器組件

  
  下面是圖表數據提供者組件一個簡短的示例:
  
  import org.mr.api.blocks.MantaOutputStream;
  .../*** 創建隨機的數據并將它發送給圖表閱讀器
  */public class GraphFeeder {
  public static void main(String[] args)
  throws Exception {
  // 創建一個具有4字節容量的小包的輸出流,這個容量可以告訴流要將
  // 信息切成小包
  MantaOutputStream out =
  new MantaOutputStream(4);
  // 將企業級輸出流聯接到一個叫graph的主題上
  out.connect("graph",
  MantaOutputStream.TOPIC);
  // 將數據包裝在DataOutputStream中,這樣我們可以輕松地寫入整數
  DataOutputStream dos =
  new DataOutputStream(out);
  int currentStatus = 0;
  for(int rounds =0 ;rounds < 30000
  ;rounds++ ){
  // 在圖表中產生隨機的波動
  int rand =(int)
  (System.currentTimeMillis()%777);
  if(rand%2 ==0){
  currentStatus++;
  }else{
  currentStatus--;
  }
  // 將數據寫入流中
  dos.writeInt(currentStatus);
  // 在產生更多的隨機數時睡眠一會兒
  Thread.sleep(rand/3);
  }
  }}
  
  下面是一個圖表閱讀器組件的簡短代碼示例:
  
  import org.mr.api.blocks.MantaInputStream;
  .../*** 以圖表的方式顯示從輸入流中獲取的數據
  */public class GraphViewer {// 運行程序
  public static void main(String[] args)
  throws IOException {
  // 初始化程序
  GraphViewer view = new GraphViewer();
  view.init();
  }
  // 程序邏輯
  public void init() throws IOException{
  // 初始化圖表
  InitGraph();
  // 創建 一個企業級輸入流
  MantaInputStream in =
  new MantaInputStream();
  // 將企業級輸出流聯接到一個叫graph的主題上
  in.connect("graph",
  MantaOutputStream.TOPIC);
  // 將輸入流包裝到DataOutputStream中,這樣我們可以輕松地讀出整數
  DataInputStream dis =
  new DataInputStream(in);
  int input =0;
  boolean go = true;
  while(go){
  try{
  //讀數據
  input=dis.readInt();
  }catch(IOException e){
  e.printStackTrace();
  go =false;
  }
  // 更新圖表
  updateGraph(input);
  }
  }}
  
  示例顯示了將一個流包裝到另一個流中去的這種能力。正如你在示例中所看到的,一個DataInputStream和一個DataOutputStream被用來以向流中寫入整數。這個圖表閱讀器示例的完整代碼可以在MantaRay的最新版本的sample目錄下找到。這篇文章簡化了代碼的例子是為了讓它適合這篇文章的長度。
  
  JMS提供了增強的特性,比如選擇器,它們對于有些任務來說是有用的,但并沒用被企業級流支持。另外,面向消息提任務可以使用JMS API來使其變得更簡單。上述例子顯示了一個像這樣的簡單的面向流的任務如何從使用MantaRay的企業級InputStream和OutputStream的簡單的面向流的API中獲益的。
  
  結論
  
  將JMS的能力與流組合在一起是非常強大的。當應用使用J2EE框架作為通訊架構時,可以使用所有流所具有的強大的能力。對于不想與JMS對象打交道的用戶來說,流也是很有用的,雖然他們有時稍顯復雜和粗笨。
  
  企業級流是MantaRay的“積木塊”集合的一部分—簡單并且直接的工具簡化了編寫分布式應用的過程,并擴展了MantaRay為分布式應用通訊所提供的能力。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠做深爱婷婷久久综合一区| 久久精品视频导航| 在线观看欧美视频| 超碰精品一区二区三区乱码| 一本色道久久综合亚洲精品小说| 日韩欧美aⅴ综合网站发布| 欧美激情第6页| 精品香蕉一区二区三区| 国产日韩欧美影视| 久久久久久久电影一区| 92裸体在线视频网站| 国产精彩精品视频| 亲子乱一区二区三区电影| 久久精品免费电影| 97超级碰碰人国产在线观看| 久久影视电视剧免费网站| 国产欧洲精品视频| 国产成人精品电影久久久| 91久久久久久久久久久| 午夜精品一区二区三区av| 欧美激情中文字幕在线| 九九热这里只有在线精品视| 欧美亚洲另类在线| 亚洲免费电影一区| 国产精品嫩草影院久久久| 亚洲成色999久久网站| 庆余年2免费日韩剧观看大牛| 亚洲国产成人91精品| 91精品久久久久久综合乱菊| 亚洲女同性videos| 国产成一区二区| 欧美亚州一区二区三区| 日韩亚洲欧美成人| 一区二区三区视频观看| 97成人精品区在线播放| 91色精品视频在线| 国产精品影院在线观看| 亚洲国产精品va在看黑人| 精品久久久免费| 精品无码久久久久久国产| 日本欧美在线视频| 亚洲成人黄色在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲性视频网址| 亚洲第一区中文字幕| 日韩一区二区三区xxxx| 国产精品18久久久久久首页狼| 精品国产欧美一区二区三区成人| 欧美一级大片视频| 欧美色videos| 亚洲色图综合久久| 久久伊人精品一区二区三区| 欧美成人一区二区三区电影| 欧美亚洲一级片| 国产精品久久久久久久久久三级| 亚洲精品www| 国产精品久久久久久久av电影| 中文字幕日韩精品有码视频| 亚洲午夜色婷婷在线| 色综合视频网站| 一色桃子一区二区| 国产日韩在线看| 久久视频免费在线播放| 亚洲国产精品久久久久秋霞蜜臀| 国产女人18毛片水18精品| 亚洲一区二区免费| 欧美乱妇高清无乱码| 欧美日韩国产丝袜美女| 美日韩在线视频| 韩国精品美女www爽爽爽视频| 国产午夜精品一区二区三区| 国产精品视频免费观看www| 中文字幕亚洲一区二区三区五十路| 欧美国产中文字幕| 成人欧美一区二区三区黑人孕妇| 亚洲第一区第一页| 91av视频在线免费观看| 爱福利视频一区| 久久免费视频这里只有精品| xxxx欧美18另类的高清| 成人激情黄色网| 成人黄色中文字幕| 国产盗摄xxxx视频xxx69| 亚洲欧美日韩在线一区| 精品亚洲一区二区三区在线播放| 奇米影视亚洲狠狠色| 亚洲激情第一页| 亚洲国产精品va| 欧美日韩亚洲视频一区| 中文字幕精品www乱入免费视频| 亚洲日本中文字幕免费在线不卡| 欧美贵妇videos办公室| 亚洲男人天堂古典| 欧美又大又粗又长| 国产精品情侣自拍| 2019中文字幕免费视频| 亚洲精品国产精品久久清纯直播| 久久九九亚洲综合| 九九热最新视频//这里只有精品| 富二代精品短视频| 夜夜躁日日躁狠狠久久88av| 51视频国产精品一区二区| 精品毛片网大全| 精品国产依人香蕉在线精品| 国产一区二区黑人欧美xxxx| 国产女同一区二区| 欧美亚洲第一区| 成人午夜两性视频| 国产69精品久久久久久| 色综合亚洲精品激情狠狠| 欧美性猛交xxxx免费看| 欧美日韩在线免费| 亚洲色图13p| 亚洲一区二区三区四区在线播放| 国产欧美va欧美va香蕉在| 欧美日韩国产一区中文午夜| 九色精品美女在线| 亚洲一区制服诱惑| 精品亚洲一区二区三区在线观看| 国产精品a久久久久久| 国产免费久久av| 国产精品第七十二页| 亚洲天堂色网站| 欧美日韩在线免费观看| 亚洲少妇中文在线| 国产欧美日韩中文字幕在线| 久久久久久久久久久久av| 亚洲第一网站免费视频| 91在线国产电影| 亚洲成人激情图| 久久久久久国产免费| 91在线直播亚洲| 91精品综合久久久久久五月天| 日韩国产欧美精品一区二区三区| 国产精品综合不卡av| 懂色av中文一区二区三区天美| 成人黄色影片在线| 欧美日韩中文在线观看| 国产精品亚洲片夜色在线| 国产精品狼人色视频一区| 91在线国产电影| 国产一区二区三区在线免费观看| 亚洲精品久久久久久久久久久久久| 国产在线拍揄自揄视频不卡99| 欧美精品情趣视频| 4444欧美成人kkkk| 亚洲精品在线观看www| 亚洲一区av在线播放| zzijzzij亚洲日本成熟少妇| 色综合久久88色综合天天看泰| 日韩精品丝袜在线| 亚洲欧美三级伦理| 亚洲成人av片在线观看| 国产精品视频yy9099| 精品欧美激情精品一区| 日韩精品免费观看| 最近免费中文字幕视频2019| 日韩毛片在线看| 亚洲精品国产拍免费91在线| 91九色单男在线观看| 日韩精品中文字幕在线观看| 中文字幕精品在线| 亚洲欧美激情四射在线日| 97在线观看免费|