我为我的InstrumentationTestCase
子类编写了一个通用的shellCommand
函数。调用executeShellCommand
函数可以正常工作(命令被执行),但是我在处理返回的ParcelFileDescriptor
时出现了问题,因为它似乎返回了垃圾数据。下面是我的通用shellCommand
函数:
public String shellCommand(String str)
{
UiAutomation uia = getInstrumentation().getUiAutomation();
ParcelFileDescriptor pfd;
FileDescriptor fd;
InputStream is;
byte[] buf = new byte[1024];
String outputString = null;
try
{
pfd = uia.executeShellCommand(str);
fd = pfd.getFileDescriptor();
is = new BufferedInputStream(new FileInputStream(fd));
is.read(buf, 0, buf.length);
outputString = buf.toString();
Log.d(TAG, String.format("shellCommand: buf '%s'",outputString));
is.close();
}
catch(IOException ioe)
{
Log.d(TAG, "shellCommand: failed to close fd");
}
return outputString;
}
以下是一个示例,展示了我如何调用它 -
String output = shellCommand("ls -al /");
Log.d(TAG, String.format("root dir = {%s}", output));
我希望能够接收命令的输出字符串(在此示例中,是一组顶级目录列表)。然而我看到了以下日志 -
我对Java并不是很熟悉,只是用它编写一些自动化测试。显然,我在使用shellCommand: buf '[B@1391fd8d'
ParcelFileDescriptor
或BufferedInputStream
方面出了些问题,请有人解释一下吗?
int.toString()
并且认为byte[].toString()
也会有同样的行为。 - fourjays