【问题标题】:Android: Can I use single InputStream for multi method?Android:我可以将单个 InputStream 用于多方法吗?
【发布时间】:2013-04-26 10:11:49
【问题描述】:

我在使用 readline() 时遇到了一些问题。我有一个 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,但效果并不好。

【问题讨论】:

    标签: android file inputstream bufferedreader


    【解决方案1】:

    您似乎已经在 LayoutDimensions 方法中关闭了输入流。

    这个

    reader1.close();
    

    【讨论】:

    • 我可以解决这个问题。在我调用 layoutdimention 方法之后。我只是在调用 build(...) 方法之前重置 InputStream。像这样... public Board(InputStream boardName) throws IOException{ int[] d = LayoutDimensions(boardName);宽度 = d[0];高度 = d[1];深度 = d[2];板布局 = 板名;板名.reset();构建(空,板名);我认为 Java 不允许同时从任何缓冲区处理访问源文件。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多