作者cuteclare (清儿)
看板java
标题Re: [投稿123] System.setOut 法
时间Thu Oct 3 04:11:27 2013
个人觉得这是可以的吧
板主请问 java.lang.ClassLoader 这种方法可不可以用
如果可以
原po的意思应该是这样
Loader123.java
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.IOException;
public class Loader123 extends ClassLoader {
public class MyOutputStream extends PrintStream {
MyOutputStream(OutputStream out) {
super(out);
}
public void write(byte[] b, int off, int len)
{
// 这边应该有更好的写法,不过我先用比较笨的 :Q
byte[] new_b = new byte[b.length];
for (int i = off; i < len; i++)
if (b[i] < 10) // 避免转换 \r\n
new_b[i] = (byte)(b[i] + 48);
else
new_b[i] = b[i];
super.write(new_b, off, len);
}
}
public Loader123(ClassLoader parent) {
super(parent);
java.lang.System.setOut(new Loader123.MyOutputStream(java.lang.System.out));
}
}
java -Djava.system.class.loader=Loader123 Output123
如果能用 Java.lang.ClassLoader 其实应该会有很多答案
※ 引述《Schelfaniel (Schelfaniel)》之铭言:
: import java.io.OutputStream;
: import java.io.PrintStream;
: import java.io.IOException;
: class MyOutputStream extends PrintStream {
: MyOutputStream(OutputStream out) {
: super(out);
: }
: public void write(byte[] b, int off, int len)
: {
: // 这边应该有更好的写法,不过我先用比较笨的 :Q
: byte[] new_b = new byte[b.length];
: for (int i = off; i < len; i++)
: if (b[i] < 10) // 避免转换 \r\n
: new_b[i] = (byte)(b[i] + 48);
: else
: new_b[i] = b[i];
: super.write(new_b, off, len);
: }
: }
: public class Output {
: public static void main(String[] args) {
: System.setOut(new MyOutputStream(System.out));
: Output123.main(null);
: }
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.239.245
※ 编辑: cuteclare 来自: 114.25.239.245 (10/03 04:15)
1F:推 PsMonkey:应该说 java.exe 的进入点必须是 Output123 的 main() 10/03 08:57
2F:→ PsMonkey:另外,你这招 #1IHlzfeJ 已经用了 Orz 10/03 08:58
3F:→ cuteclare:了解~ 10/03 14:38