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,但它不是更好。
謝謝您的回答,但它沒有工作。 – 2013-04-26 10:41:43
我可以解決這個問題。 在我調用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