2011-09-21 60 views
2

據我所知,流的大小是固定的,無論是內存還是文件流。是否有像串口或網絡套接字連接這樣的開放式流的術語?非大小限制流函數的術語是什麼?

我正在使用Delphi XE。我查看了TStream後面的類。我想創建一個適用於串口,網絡套接字,鍵盤輸入或模擬數據的通用類的接口。這些將是沒有指定長度的數據流,包含可用數據的數據包。

我不知道正確的搜索詞。也許正確的術語是一個套接字,但這似乎是一個更具體的網絡術語。

回答

4

流,管道,插座,文件,無論...他們都是相似的,如下所示:

  • 他們被初始化(打開),然後銷燬(關閉);
  • 你在這個結構上有一個句柄(實例);
  • 您使用讀取和寫入方法,它可以檢索比請求更少的內容(它允許未定義/無限/抽象流)。

POSIX/UNIX世界,比如「一切皆文件」,甚至網絡,設置,CPU,設備...

在Delphi中,你可以完全從TStream繼承實現這種行爲。

即使是Seek方法也不需要處理所有情況。您可以擁有單向/單向流,只讀流或只寫流。

然後,你可以共享相同的代碼與各種TStream實現,文件,網絡,一些內存,鍵盤,屏幕,無論什麼......你甚至可以嵌套流,以便添加on-即時壓縮,加密,複製......

所以,如果你是在Delphi的世界,只是稱之爲「流」,實現了一個TStream ...快樂編碼!

2

這仍然是一個流。您可以將其稱爲順序訪問流,以區分它與隨機訪問流。在實施TStream後代時,如果有人調用Seek方法來尋找反向,前向或任何其他不允許的用法,則可以自由使Seek方法發出異常。即可以讀取,但不能寫入

東西是,並可以寫入,但不讀是東西。這些條款不包含固定大小。

+0

這就是所謂的**單向**。 –

+2

@Downvoter,*單向*表明允許尋找,但僅限於一個方向(可能是前向)。如果底層數據源不支持查找,您可以通過執行'Seek'來模擬它,以便它調用'Read'並放棄它所讀取的內容。如果你不能跳過輸入,你不執行'Seek',使它看起來像你的話,我不認爲*單向*是一個好名詞。 –

0

聽通信的端口,插槽或其它類型的有時被稱爲嗅探協議分析器

爲了實現這個通用方法並不是微不足道的。

您將不得不爲每種類型的通信實現特定的抽象層。例如,在不知道協議格式的情況下監聽串行端口是註定要失敗的。

+0

我希望做一個真正簡單的界面,使AnsiCharacters的緩衝區,可提供完全不考慮它包含的數據的通知事件。接收數據的對象將其存儲到另一個緩衝區中,並決定是否通知下一級是否有可接受的數據。 [數據消費者] <---- [原始數據解析器] <---- [串行數據源] –

+0

TB的的緩衝區是一個較好的方法,因爲AnsiStrings應該在數據分組中被避免。 –

+0

這些不會是這個級別的字符串。數據可能不完整。字節會更好的描述。我試圖傳達的數據不會是Unicode。 –

相關問題