java - 如何检查该程序是否适用于标准 I/O 流&
解决方案
如果您可以使用反射,此方法将执行以下操作:
private boolean isStandardOutput()
{
boolean x;
try
{
Field field=FilterOutputStream.class.getDeclaredField("out");
field.setAccessible(true);
Object value=System.out;
do
{
value=field.get(value);
}
while (value instanceof FilterOutputStream);
if (value instanceof FileOutputStream)
{
Field fieldFd=FileOutputStream.class.getDeclaredField("fd");
fieldFd.setAccessible(true);
FileDescriptor fileDescriptor=(FileDescriptor)fieldFd.get(value);
x=(fileDescriptor == FileDescriptor.out);
}
else
{
x=false;
}
}
catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e)
{
x=false;
}
return x;
}
背后的想法很简单:它连续解开System.out
值,直到找到一个FileOutputStream
值。然后,获取它的内部FileDescriptor
并检查它FileDescriptor.out
(它是一个常量值,不能修改)。
模拟算法可用于System.in
和System.err
。
推荐阅读
- android - 手机锁定时启动收入电话活动android
- pandas - 熊猫将一列添加到许多其他列
- python - xtensor 的 "operator/" 比 numpy 的 "/" 慢
- sql - Oracle SQL Developer - 使用参数创建视图
- php - 在 PHP 文件中使用 WooCommerce 函数
- ssl - 生成 SSL 证书时不要问问题
- asp.net-core - 编辑帐户用户和角色 .Net 核心身份
- python - 如何处理一列整数字符串以对其应用数学运算
- java - Android系统Switch定制
- c# - 以字符串格式从 SQLITE 获取所有数据 创建一个带有此记录的文本文件 将此文件保存在设备上?