2013-04-26 45 views
1

我有一些關於使用readline()的問題。我有一個inputStream它是從主類Android:我可以使用單個InputStream進行多方法嗎?

  private String url = "BoardLayoutSet/01_basic.templete"; 
      private InputStream boardName = getResources().getAssets().open(url); 
      Board b = new Board(boardName); 

而且我發送這個「boardName」是InputStream到「Board」類。在這個Board.class的構造函數如下代碼

 public Board(InputStream boardName) throws IOException{      
    int[] d = LayoutDimensions(boardName); //<----First,use InputStream   
    .... 
      ......  
    build(null, boardName); //<<--Second,Use InputStream     
    } 

第一個方法被這個構造函數調用(上圖)。 第一種方法是使用「的InputStream」像這樣(下)

public int[] LayoutDimensions(InputStream boardName) throws IOException {   
    BufferedReader reader1 = new BufferedReader(new InputStreamReader(boardName));  
    L1 = reader1.readLine(); // #Basic 
    L1 = reader1.readLine(); // %Level 1 
    L1 = reader1.readLine(); // space line 
    L1 = reader1.readLine(); // First row of board 
    for (int i = 0; i < L1.length(); i++) { 
     if (L1.charAt(i) != ' ') { 
      x++; 
     } 
    } 
    System.out.println(L1); 
    System.out.println("Width(x):" + x); 
    // //////////////// 
    boardName.reset(); 
    BufferedReader reader2 = new BufferedReader(new InputStreamReader(boardName)); 
    L2 = reader2.readLine(); // #Basic 
    L2 = reader2.readLine(); // %Level 1 
    L2 = reader2.readLine(); // space line 
    L2 = reader2.readLine(); // First row of board 

    while (L2.length()!=0) { 
     System.out.println(L2.charAt(0)); 
     y++; 
     L2 = reader2.readLine(); 
    } 
    System.out.println("Height(y):" + y); 
    ..... 
      ...... 

    reader1.close(); 
    reader2.close(); 
    reader3.close(); 

    return dimensions; 

    } 

當我僅使用一種方法。它可以工作。接下來,我需要調用這樣的第二種方法

protected void build(Random r1, InputStream boardName) throws IOException { 



    if (r1==null) { 
     long seed = new Random().nextLong(); 
     r = new Random(seed); 
    } else { 
     r = r1; 
    } 


    tTile = new Tile[depth][height][width]; 
    int x; 
    int y; 
    int z=-1; 

    BufferedReader buffer = new BufferedReader(new InputStreamReader(boardName)); 

    String L=null; 
    buffer.reset(); 
    L = buffer.readLine(); //Basic 
    ....... 
      ...... 
      ...... 

這是錯誤,因爲此行>> L = buffer.readLine(); 我試過交換順序:在第一種方法之前使用第二種方法。第二種可以使用但第一種方法是錯誤的。 我認爲這是Inputstream的問題,所以我試圖做兩個Inputstream,但它不是更好。

回答

1

看來您已經關閉了方法LayoutDimensions中的輸入流。

reader1.close(); 
+0

謝謝您的回答,但它沒有工作。 – 2013-04-26 10:41:43

+0

我可以解決這個問題。 在我調用layoutdimention方法之後,我在調用build(...)方法之前重置了InputStream。像這樣... 公共委員會(InputStream的boardName)拋出IOException異常{\t \t \t \t \t \t \t INT [] d = LayoutDimensions(boardName); \t \t \t \t width = d [0]; \t \t height = d [1]; \t \t depth = d [2]; \t \t \t \t boardLayout = boardName; \t \t boardName.reset(); \t \t build(null,boardName); \t \t \t \t \t} 我認爲Java不允許訪問的緩衝區的任何處理的源文件在同一時間。 – 2013-04-29 05:01:25

相關問題