FileChannel 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個用於讀取、寫入、映射及操作檔案的通道。
[Android.Runtime.Register("java/nio/channels/FileChannel", DoNotGenerateAcw=true)]
public abstract class FileChannel : Java.Nio.Channels.Spi.AbstractInterruptibleChannel, IDisposable, Java.Nio.Channels.IGatheringByteChannel, Java.Nio.Channels.IScatteringByteChannel, Java.Nio.Channels.ISeekableByteChannel
[<Android.Runtime.Register("java/nio/channels/FileChannel", DoNotGenerateAcw=true)>]
type FileChannel = class
inherit AbstractInterruptibleChannel
interface IByteChannel
interface IReadableByteChannel
interface IChannel
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IWritableByteChannel
interface IGatheringByteChannel
interface IScatteringByteChannel
interface ISeekableByteChannel
- 繼承
- 屬性
- 實作
備註
一個用於讀取、寫入、映射及操作檔案的通道。
檔案通道是指連接到檔案的通道 SeekableByteChannel 。 它在檔案中有一個當前 位置 ,可以同時 #position() <i>queried</i> 是 和 #position(long) <i>modified</i>。 檔案本身包含一個可變長度的位元組序列,可讀寫且可查詢其當前值 #size <i>size</i> 。 當位元組寫入超過目前大小時,檔案大小會增加;當檔案大小為 #truncate <i>truncated</i>時會減少。 檔案中也可能包含一些相關的 元資料 ,例如存取權限、內容類型及最後修改時間;此類別未定義元資料存取的方法。
除了熟悉的位元組通道的讀寫與關閉操作外,此類別還定義了以下檔案專屬操作:
<UL>
<李>
位元組可以在#read(ByteBuffer, long) read#write(ByteBuffer, long) <i>written</i>檔案中的絕對位置,且不影響通道目前的位置。
</李>
<李>
檔案的某個區域可以#map <i>mapped</i>直接進入記憶體;對於大型檔案,這通常比一般readwrite呼叫方法更有效率。
</李>
<李>
對檔案的更新可能是 #force <i>forced out</i> 針對底層儲存裝置,確保系統當機時資料不會遺失。
</李>
<李>
位元組可以從檔案 #transferTo <i>to some other channel</i>、 和 #transferFrom <i>vice versa</i>傳輸,這種方式被許多作業系統優化,能快速直接傳送到或從檔案系統快取。
</李>
<李>
檔案的某個區域可能無法 FileLock <i>locked</i> 被其他程式存取。
</李>
</ul>
檔案通道對多個並行執行緒來說是安全的。
Channel#close close該方法可依介面指定Channel,隨時被呼叫。 任何時刻,只有一種操作涉及通道位置或能改變檔案大小;在第一次操作進行中嘗試啟動第二次操作時,將被阻塞,直到第一次操作完成。 其他操作,特別是採取明確立場的操作,可能會同時進行;是否真的這麼做取決於底層實作,因此未明確說明。
本類別實例所提供的檔案視圖保證與同一程式中其他實例所提供的相同檔案視圖一致。 然而,由於底層作業系統執行快取及網路檔案系統協定造成的延遲,該實例所提供的視圖可能與其他同時執行的程式所見一致,也可能不一致。 無論這些程式使用的語言為何,無論它們是在同一台機器上執行還是在其他機器上,這點都成立。 任何此類不一致的具體性質皆依賴系統,因此未被明確說明。
透過呼叫 #open open 此類別定義的方法之一,即可建立檔案通道。 也可以透過呼叫java.io.FileInputStream#getChannel FileInputStream現有的 、 或java.io.FileOutputStream#getChannel FileOutputStreamjava.io.RandomAccessFile#getChannel RandomAccessFile物件的方法,從該getChannel物件的方法中取得檔案通道,該通道會回傳一個連接至同一底層檔案的通道。 若檔案通道是從現有串流或隨機存取檔案取得,則檔案通道的狀態與回 getChannel 傳通道的物件狀態密切相關。 改變通道位置,無論是明確改變或透過讀寫位元組,都會改變原始物件的檔案位置,反之亦然。 透過檔案通道改變檔案長度,會改變原始物件所見的長度,反之亦然。 透過寫入位元組改變檔案內容,會改變原始物件所看到的內容,反之亦然。
「開放模式」>
在某些時候,這個類別會指定一個「開放閱讀」、「開放寫作」或「開放閱讀與寫作」的實例。 透過 java.io.FileInputStream#getChannel getChannel 實例方法 java.io.FileInputStream 取得的通道將開放供讀取。 透過 java.io.FileOutputStream#getChannel getChannel 實例取得 java.io.FileOutputStream 的通道將開放供撰寫。 最後,若java.io.RandomAccessFile#getChannel getChanneljava.io.RandomAccessFile實例建立為 模式,該實例"r"將開啟讀取通道;若實例以 "rw"模式建立,則該通道可讀取與寫入 。
「附加模式」>
一個開放寫入的檔案通道可能處於 附加模式,例如若該通道是從透過調用 java.io.FileOutputStream#FileOutputStream(java.io.File,boolean) FileOutputStream(File,boolean) 建構子並傳遞 true 第二個參數所建立的檔案輸出串流取得的。 在此模式下,每次呼叫相對寫入操作都會先將位置推進到檔案末尾,然後寫入所請求的資料。 位置的推進與資料寫入是否在單一原子操作中完成,取決於系統,因此未明確說明。
在 1.4 版本加入。
Java 文件 java.nio.channels.FileChannel。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| FileChannel() |
初始化此類別的新實例。 |
| FileChannel(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| IsOpen |
如果此通道開啟,則回傳為真。 (繼承來源 AbstractInterruptibleChannel) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| JniPeerMembers |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個用於讀取、寫入、映射及操作檔案的通道。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| ISeekableByteChannel.Position(Int64) |
設定此頻道的位置。 |
| ISeekableByteChannel.Truncate(Int64) |
將連接此通道的實體截斷為給定大小。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| ReadAsync(IReadableByteChannel, ByteBuffer) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| ReadAsync(IScatteringByteChannel, ByteBuffer[], Int32, Int32) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| ReadAsync(IScatteringByteChannel, ByteBuffer[]) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |
| WriteAsync(IGatheringByteChannel, ByteBuffer[], Int32, Int32) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| WriteAsync(IGatheringByteChannel, ByteBuffer[]) |
一個用於讀取、寫入、映射及操作檔案的通道。 |
| WriteAsync(IWritableByteChannel, ByteBuffer) |
一個用於讀取、寫入、映射及操作檔案的通道。 |