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

利用JAVA向垃圾電子郵件宣戰

2013-11-23 17:53:14  來源: Javascript 

  摘 要計算機技術給我們的日常生活帶來了很多便利來自生產線 的產品高效的通信以及大量易於訪問的信息然而它同時也帶來了垃圾電子郵件幸運的是 我們已經有辦法對付它本文將對Java類庫的I/O包以及建立在其上的模型進行深入的討 論包括它是如何工作的Java和Java在I/O實現方面的差別以及如何利用這些知 識建立一個垃圾電子郵件過濾器
  足不出戶也能至富
  神奇的飲食一周減肥
  熱情的XXX寶貝想見你
  有時我們會收到很多不受歡迎的 電子郵件這些郵件往往令人不快那些還沒有受垃圾電子郵件之苦的幸運者也應該意識到這 是一個現實的問題這裡我們將介紹一種利用JAVA控制垃圾電子郵件的方法
  監視敵人
  我們無法逃避垃圾電子郵件只能 盡量減少它對我們生活的侵擾最好也是最有效的方法是阻止人們給我們發不受歡迎的電子 郵件我們必須在看到垃圾電子郵件之前消除它那麼如何實現呢?
  一種行之有效的方法是檢查電子郵件的內容然後決定是否保留它其實我們在閱讀電子郵件時就是這樣做的我們一個接一個字符一行接一行地讀電子郵件搜索我們認識地單詞如果其中包括單詞Java我們便保留它如果包括MakeMoneyFast我們便將它扔到垃圾桶裡能否編制一個計算機程序來幫助我們更有效地工作呢?
  戰術評估
  下面我們討論Java類庫I/O包中 的類Java類庫的輸入輸出類基於一種簡單但強大的模型(Streams)
  在模型中信 息從一點到另一點就象在河流或者管道中一樣中的任何一點觀察者看到信息一 點一點地順序流過這種模型適合現實世界中很多類型的信息比如來自計算機鍵盤的鍵 碼(Keycodes)來自聲音文件的聲音數據來自文本文件的一行接一行的文本等都是信息流
   
  圖中信息從一點傳到另一點
  中的一個重 要工具便是過濾器(Filters)過濾器上游獲取信息用某種方式過濾或者處理 後發送到下游模型功能強大的關鍵是可以用一些非常簡單的獨立的過濾器 串成一個功能強大的復合過濾器
   
  圖過濾器中斷處理信息流
  
  圖級聯過濾器
  Java類庫將分為兩類──輸 入和輸出這種區分在理論上是不必要的但是在實際應用中卻是有用的輸入的最初來源 是某一設備或者文件它將數據從設備或文件輸入到程序中輸入在處理中一般是要過濾 的輸出的最終目標也是某一設備或者文件它將數據從程序輸出到設備或文件中輸入在處理中一般也是要過濾的
  有兩個原因使我們將Java類庫中 的類應用到垃圾電子郵件問題的解決方案中
  可以很容易地將電子郵件看做是一個接一個字符一行接一行進入到計算機的
  當電子郵件進入計算機時我們要一個接一個字符一行接一行地檢查是否與我們指定的模板匹配
  兵工廠──類詳細介紹
  Java說明書中描述了兩種基 本相同的輸入和輸出類集一種是面向字節的另一種是面向字符的面向字節類與在Java 中實現的只有微小的差別而面向字符類是在Java版本中最新實現的
  本文中我們討論面向字節的這樣做有兩個原因首先對那些沒有使用Java的人也可以利用這份材料其次我們可以指出Java中類庫中出現在Java中已經修正的一些錯誤
  上面已經提過可以分為兩類輸入和輸出在Java中所有面向字節的輸入類都是抽象類InputStream的子類InputStream定義了所有輸入類必須提供的一套基本方法(Mothods)同樣所有面向字節的輸出類都是抽象類OutputStream的子類OutputStream定義了所有輸出類必須提供的一套基本方法(Mothods)
  通用輸入類方法
  以下是對所有輸入通用的方 法每個方法說明之後列出了方法能執行的任務
  publicint read()throws IOException
  從輸入讀一個 字節並且返回此字節
  如果已經 到了輸入的結尾則返回
  如果必要阻塞(或等待)直到數據可用
  當讀操作時發生錯誤則拋 出IOException異常
  publicint read(byte[]rgb) throws IOException
  從輸入讀一字節序列並且置於指定的數組中
  返回所讀的字節數
  如果已經到了輸入的結尾 則返回
  如果必要阻塞(或等 待)直到數據可用
  當讀操作時發 生錯誤則拋出IOException異常
  publicint read(byte[]rgb intnOffintnLen)throws IOException
  從輸入讀一指定長度的字節 序列並且置於指定的數組中指定偏移上
  返回所讀的字節數
  如果已經到了輸入的結尾 則返回
  如果必要阻塞(或等 待)直到數據可用
  當讀操作時發 生錯誤則拋出IOException異常
  publiclong skip(longn) throws IOException
  跳過指定 的字節數
  返回跳過的字節數
  如果已經到了輸入的結尾 則返回
  當操作時發生錯誤則 拋出IOException異常
  publicinta vailable() throws IOException
  返回可以 從輸入中讀取的字節數而不產生讀操作阻塞
  當操作時發生錯誤則拋 出IOException異常
  publicvoid close()throws IOException
  關閉輸入釋 放所有與此輸入有關的資源(例如操作系統文件句柄)
  當操作時發生錯誤則拋 出IOException異常
  publicvoid mark(int nReadLimit)
  在輸入中標識 當前位置以後當調用reset()時輸入將重新定位在此位置上
  指定在標識無效之前標識之後 能讀取的字節數
  publicvoid reset()throws IOException
  將輸入重新定 位在最近標識的位置上
  如果沒有標識或者標識已經無效則拋出IOException異常
  public boolean mark Supported()
  顯示此輸入是否支持mark和reset操作
  通用輸出類方法
  以下是對所有輸出通用的方 法與前一部分一樣每個方法說明之後列出了方法能執行的任務
  publicvoid write(byteb) throws IOException
  將一個字 節寫入輸出
  阻塞(或等待) 直到數據真正寫入
  當寫操作時 發生錯誤則拋出IOException異常
  publicvoid write(byte[] rgb)throws IOException
  將一 個字節序列寫入輸出
  阻塞( 或等待)直到數據真正寫入
  當寫操作時發生錯誤則拋出IOException異常
  publicvoid write (byte[] rgbintnOffintnLen) throws IOException
  將一個指定長度的字節序列從指 定的偏移量開始寫入輸出
  阻塞(或等待)直到數據真正寫入
  當寫操作時發生錯誤則拋 出IOException異常
  publicvoid flush ()throws IOException
  沖洗輸出 立即寫所有的緩沖數據
  當操作 時發生錯誤則拋出IOException異常
  publicvoidclose()throws IOException
  關閉輸出釋 放所有與此輸出有關的資源(例如操作系統文件句柄)
  當操作時發生錯誤則拋 出IOException異常
  攻擊計劃
  本文的代碼有三種形式這是因 為在Java中字節到字符的轉換有重要的瑕疵(使語言對Unicode的支持無實質用處)為 了支持國際化這個瑕疵在Java中得到了修正結果是產生兩套幾乎相同的API僅僅在提 供給字節到字符的轉換的方法有所區別為了給所有人提供可工作的代碼以及顯示API是如何 改變的我們用三個包提供代碼必要時可以下載所有三個包做比較也可以下載適合你平台的 包
  第一個包運行在Java 有tar文件和zip文件
  第二個包運行在Java也 有tar文件和zip文件
  第三個包同時運行在Java 和Java這個包沒有使用API中沖突的部分它自己完成工作你如果對可移植性更感興趣 可以以tar文件或者zip文件下載此包本文的代碼不是以小程序(Applets)的方式運行所以你 需要Java Develop ment Kit或者類似的命令行環境
  首先在你的系統中用正確的方 法解開下載的文件然後在命令行下按照如下命令執行Java Runtime%javaMain [keyword] [keyword]...[emailfile]你可以在命令行中指定任意多的關鍵字(Keywords)程 序對每個關鍵字建立一個過濾器然後將它們一起連接入一個當輸入以標准輸入 進入時程序從標准輸入中讀取數據通過傳送這些數據寫入標准輸出中如果有一 個過濾器檢測到一個關鍵字就會產生一個異常以結束程序這種解決方案很簡單但 是非常有用而且高效
  
  
  
  
  

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