語言

FileChannel 類別

定義

一個用於讀取、寫入、映射及操作檔案的通道。

[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

回傳此 Object的執行時類別。

(繼承來源 Object)
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
Begin()

這標誌著一個可能無限期阻塞的 I/O 操作開始。

(繼承來源 AbstractInterruptibleChannel)
Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Close()

關閉這個頻道。

(繼承來源 AbstractInterruptibleChannel)
Construct(JniObjectReference, JniObjectReferenceOptions)

一個用於讀取、寫入、映射及操作檔案的通道。

(繼承來源 JavaObject)
Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

一個用於讀取、寫入、映射及操作檔案的通道。

(繼承來源 JavaObject)
End(Boolean)

這表示一個可能無限期阻塞的 I/O 操作結束。

(繼承來源 AbstractInterruptibleChannel)
Equals(Object)

一個用於讀取、寫入、映射及操作檔案的通道。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
Force(Boolean)

強制將該通道檔案的任何更新寫入包含該通道的儲存裝置。

ForceAsync(Boolean)

一個用於讀取、寫入、映射及操作檔案的通道。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
ImplCloseChannel()

關閉這個頻道。

(繼承來源 AbstractInterruptibleChannel)
JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Lock()

取得該頻道檔案的獨家鎖定。

Lock(Int64, Int64, Boolean)

鎖定該頻道檔案的指定區域。

Map(FileChannel+MapMode, Int64, Int64)

將此通道檔案的某個區域直接映射到記憶體中。

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
Open(IPath, ICollection<IOpenOption>, IFileAttribute[])

開啟或建立檔案,回傳檔案通道以存取該檔案。

Open(IPath, IOpenOption[])

開啟或建立檔案,回傳檔案通道以存取該檔案。

Position()

回傳此頻道的檔案位置。

Position(Int64)

設定此頻道的檔案位置。

Read(ByteBuffer, Int64)

從該通道讀取一串位元組到指定緩衝區,從指定的檔案位置開始。

Read(ByteBuffer)

從此通道讀取一串位元組到給定的緩衝區。

Read(ByteBuffer[], Int32, Int32)

從此通道讀取一串位元組到給定緩衝區的子序列中。

Read(ByteBuffer[])

從此通道讀取一串位元組到給定的緩衝區。

ReadAsync(ByteBuffer, Int64)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(ByteBuffer)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(ByteBuffer[], Int32, Int32)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(ByteBuffer[])

一個用於讀取、寫入、映射及操作檔案的通道。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

一個用於讀取、寫入、映射及操作檔案的通道。

(繼承來源 JavaObject)
Size()

回傳此通道檔案的當前大小。

ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
TransferFrom(IReadableByteChannel, Int64, Int64)

從給定的可讀位元組通道傳輸位元組到該通道的檔案中。

TransferFromAsync(IReadableByteChannel, Int64, Int64)

一個用於讀取、寫入、映射及操作檔案的通道。

TransferTo(Int64, Int64, IWritableByteChannel)

將該通道檔案中的位元組傳輸到指定的可寫位元組通道。

TransferToAsync(Int64, Int64, IWritableByteChannel)

一個用於讀取、寫入、映射及操作檔案的通道。

Truncate(Int64)

將此通道的檔案截斷至指定大小。

TruncateAsync(Int64)

一個用於讀取、寫入、映射及操作檔案的通道。

TryLock()

試圖取得該頻道檔案的專屬鎖。

TryLock(Int64, Int64, Boolean)

嘗試鎖定該頻道檔案的指定區域。

UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Write(ByteBuffer, Int64)

從指定緩衝區寫入一串位元組到該通道,從指定檔案位置開始。

Write(ByteBuffer)

從給定的緩衝區寫入一串位元組到該通道。

Write(ByteBuffer[], Int32, Int32)

從給定緩衝區的子序列中寫入一串位元組到此通道。

Write(ByteBuffer[])

從給定緩衝區寫入一串位元組到此通道。

WriteAsync(ByteBuffer, Int64)

一個用於讀取、寫入、映射及操作檔案的通道。

WriteAsync(ByteBuffer)

一個用於讀取、寫入、映射及操作檔案的通道。

WriteAsync(ByteBuffer[], Int32, Int32)

一個用於讀取、寫入、映射及操作檔案的通道。

WriteAsync(ByteBuffer[])

一個用於讀取、寫入、映射及操作檔案的通道。

明確介面實作

名稱 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)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(IReadableByteChannel, ByteBuffer)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(IScatteringByteChannel, ByteBuffer[], Int32, Int32)

一個用於讀取、寫入、映射及操作檔案的通道。

ReadAsync(IScatteringByteChannel, ByteBuffer[])

一個用於讀取、寫入、映射及操作檔案的通道。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

WriteAsync(IGatheringByteChannel, ByteBuffer[], Int32, Int32)

一個用於讀取、寫入、映射及操作檔案的通道。

WriteAsync(IGatheringByteChannel, ByteBuffer[])

一個用於讀取、寫入、映射及操作檔案的通道。

WriteAsync(IWritableByteChannel, ByteBuffer)

一個用於讀取、寫入、映射及操作檔案的通道。

適用於