簡體   English   中英

如何一次讀取文件x字節? 在java中

[英]How do I read file x bytes at a time ? in java

我想將文件讀入Java的String中,一次x個字符。 然后,我將對字符串進行一些操作,並希望從我中斷的地方繼續。 我該怎么辦?

編輯:

目標文件是一個簡單的文本文件。

好吧,首先您需要區分字節字符 您可以一次從InputStream讀取一定數量的字節(作為最大數量;不能保證將獲得所需的所有字節),並且可以從Reader一次讀取多個字符。時間(再次,最大)。

聽起來您可能想在InputStreamReader周圍使用InputStream ,指定適當的字符編碼,然后從InputStreamReader讀取。 如果必須有准確的字符數,則需要循環-例如:

public static String readExactly(Reader reader, int length) throws IOException {
    char[] chars = new char[length];
    int offset = 0;
    while (offset < length) {
        int charsRead = reader.read(chars, offset, length - offset);
        if (charsRead <= 0) {
            throw new IOException("Stream terminated early");
        }
        offset += charsRead;
    }
    return new String(chars);
}

您是否嘗試過使用BufferedReader 它定義了read(char[], int, int) ,它幾乎完全滿足您的要求。 也就是說,它遞歸地調用read來嘗試填充緩沖區。

用法示例:

char[] chars = new char[length];
reader.read(chars,0,length);
String str = String.valueOf(chars);

說明文件:

public int read(char [] cbuf,int off,int len)拋出IOException

此方法實現Reader類的相應read方法的常規協定。 作為一個額外的便利,它嘗試通過重復調用基礎流的讀取方法來讀取盡可能多的字符。 重復執行此迭代讀取,直到滿足以下條件之一:

  • 已讀取指定數量的字符,
  • 基礎流的read方法返回-1,表示文件結束,或者
  • 基礎流的ready方法返回false,指示其他輸入請求將被阻止。

如果對基礎流的第一次讀取返回-1表示文件結束,則此方法返回-1。 否則,此方法返回實際讀取的字符數。

最后一點很重要,因為這意味着可以阻塞的流返回的字符可能少於預期的字符。 盡管從本地文件讀取時,讀取器或流應始終具有可讀取的字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM