2015-07-21 84 views
-1

我來自C/Linux背景,並沒有太多的Java背景知識。我一般開發的系統管理員實用工具,比如:在Java中開發網絡安全應用程序和系統實用程序

  • 磁盤清理
  • 找回丟失的數據/文件
  • 修復文件系統
  • 磁盤碎片整理

我還開發了網絡監控安全應用幫助管理員監控: - 他們的網絡, - 掃描傳入&傳出數據包, - 遠程阻止端口/ USB - 監視帶附件的電子郵件等

現在我們編寫用於Linux的C代碼,必須移植到Windows,但Java中不存在這樣的問題。

我的問題是:

  • 就是Java編寫這些應用&公用事業正確的語言(如上所述)?

  • 我知道Java會提供庫和類來訪問系統資源/網絡/套接字,但Java抽象會成爲一個障礙(這會限制C/C++提供的靈活性)?

  • 例如,如果我想編寫一個實用程序來修復文件系統/或檢索Windows的數據& Unix ...我將使用相同的API的操作系統或不同的操作系統有不同的API?

我並不關心速度/執行權衡,因爲我的應用程序都不必像遊戲行業一樣做出實時決策。

回答

0

如果您想要可移植性,Java是正確的語言。您幾乎可以用C/C++完成所有工作,您可以利用模式和庫來幫助您創建出色的可維護設計。如果你的Java有一些非常低的級別,那麼你總是可以創建自己的本地代碼,並使用Java Native Interface加載。因此,唯一不可移植的代碼將是這些本地代碼庫。

+0

感謝您的回覆。我通常開發程序,如磁盤清理,檢索丟失的數據/文件,修復文件系統,磁盤碎片和網絡掃描和監控。所有這些都可以在Java中實現,並且像在C/C++ –

+0

@SamAnderson中的工作一樣高效地工作,「與C/C++一樣高效」,您總是更快。有時候這個時間差距並沒有得到回報。在提到Java的任務中,它可以做得很好。記住Java甚至用於嵌入式系統。在監控和網絡掃描中,您可以使用Java進行確認。修復文件系統,你只需要谷歌爲適當的接口,你會發現你需要或使用JNI做到這一點。 – rodolk

0

現在我們下的Linux具有被移植到 窗口,但這樣的問題就不會存在於Java編寫代碼。

因爲最終低級別的東西總是歸結爲進行系統調用,所以在不同的操作系統之間Java只能抽象出很多東西。

只要你使用純java邏輯或簡單的操作系統實用程序,你就會變成黃金。你想打開一個TCP套接字並連接到google.com?沒問題。你想打開一個已知位置的文件,讀取一些行,處理它們,並將結果寫入不同的文件?沒問題,Java有你覆蓋。但是,如果你想用Java來做更多低級的事情,你很快就會遇到麻煩。你想打開一個原始套接字併發送一個TCP數據包?你不能,windows doesn't allow that。你想在Linux上獲取文件的創建時間?你不能,Linux不保留這些信息。 Java的BasicFileAttributes.creationTime()will return a file's modification time on Linux。你想獲得納秒級的時間戳?那麼,你可以,but only on some OSes。或者說你想在沒有采取網絡查詢(這取決於網絡實際可用)的情況下獲得計算機的主機名,那麼,準備好some hacking(這是我自己的答案)。

現在,你更具體的問題:

就是Java編寫這些應用&公用事業正確的語言(如上所述)?

我坦率地不知道。我從來沒有嘗試過使用Java以編程方式對文件進行碎片整理或恢復。但是由於它涉及到一些非常低級的文件系統操作,所以我建議你在轉移到Java之前做一些認真的閱讀。檢查您需要的API是否存在於語言本身或一些好的庫中。

我理解Java將提供庫和類來訪問系統資源 /網絡/插座但Java的抽象是在某些時候成爲障礙 (這將限制其C/C++ 提供了靈活性)?

是的。例如,使用純Java打開原始套接字是不可能的。如果我記得正確的話,也不可能設置一些套接字選項。

例如,如果我想寫一個實用程序來修復文件系統/或 檢索Windows & Unix的數據...我會使用相同的API兩個 OS或有不同的操作系統不同的API ?

我從來沒有試過在Java中修復文件系統的,所以我不能告訴你有關的API。但是我發現很難相信你會發現一個純粹的Java API用於在文件系統中執行低級別的事情。您可能必須編寫自己的本地代碼(並通過JNI運行它)或使用其他人的庫(可能使用JNI,就像我之前提到的原始套接字庫)。