2014-02-27 45 views
0

我正在研究一個項目,我需要解析一個文本文件並使用該信息來執行一些數據操作。構建解析器類的最佳方法

我有一個解析器類,並在其中使用數組來存儲我的數據從文本文件。然後我有一個使用這些數據的單獨的類。我目前的設置是這樣的(僞代碼顯然):

class Parser{ 

private: 
array parsedData; 

public: 
inline array getParsedData(){ 
    return parsedData; 
} 

}; 

class algorithms{ 


//functions that use data from parsedData array; 

}; 

我覺得這是相當低效的只是有一個私人數組,然後只是有一個公共的功能,只是返回,我可以拋出數組周圍。我覺得有一個更好的方法來構建這個。關於如何構建我的代碼的任何建議?

回答

1

在Java中,至少「return parsedData」將返回對「私有數組」的引用。

調用程序然後可以做任何它喜歡的parsedData;

因此,它是非常有效的,因爲只有地址被傳遞,但是,如果您的意圖是在您的類中保留一個私有不可變副本,那麼您將需要返回一個效率較低的parsedData副本。

在C++中,你需要顯式地返回一個引用或者一個副本,但是在Java中,引用是你可以返回的。

+0

但是有沒有更好的做法呢? – user2604504

+0

+1關於需要不變性的好處!這是恕我直言,避免這個類並從方法返回解析數據的一個很好的理由。 –

2

您的權利予以關注,因爲這裏有不少問題:

  • 將解析器中重用?
  • 是否需要線程安全?
  • 你是否正在解析一個巨大的文本文件,在這種情況下緩衝解析的數據將不如「流」它有效。

如果你有一個比較小的文本文件,並要在單個線程使用的解析器只有一次,那麼你

  • 數組初始化爲null
  • 確保陣列字段是私人的,沒有setter
  • 有一個parse方法,它將讀取文本文件並設置數組字段的值
  • parse如果數組字段不爲null,則會引發異常。

然而,這很複雜。對於小文本文件的另一種方法,但你需要解析多次:

  • 解析器將只有一個靜態方法稱爲parse這需要在文本文件,並返回解析令牌陣列。

單方法方法的好處在於,您不需要將令牌數組作爲有狀態事物進行管理的複雜性。而且你有一個更小的界面,這很好。

最後,如果你有一個大的文本文件,你的解析方法產生的令牌作爲一個流。

相關問題