将字符串传递给输入流

时间:2017-11-08 07:28:38

标签: java inputstream

有人写了一篇我想测试的课程。它看起来像:

public class foo <E>{  
     public static void main(String[] args){
         Scanner scan = new Scanner(System.in);
         do_stuff(scan.nextInt());
     }
}

我有另一个类试图测试上面函数的main方法如下:

public class Test{
   public static void main(String[] args){
        System.in.read("5".getBytes());
        foo.<Integer>main(new String[]{});
   }
}

基本上,我正在尝试使用Test类将输入提供给流,该流将很快被foo中的Scanner读取。我根本无法改变foo,因为它是别人的代码。

为什么这不起作用?这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

你的System.in.read("5".getBytes())所做的是将一个字节数组传递给read方法,该方法尝试用用户输入填充它。它完全忽略了你放在那个字节数组中的数据。

您必须致电System.setIn()以更改与System.in相关的信息流:

System.setIn(new ByteArrayInputStream("5".getBytes()));
foo.<Integer>main(new String[]{});