小编Syn*_*r0r的帖子

OS X:相当于Linux的wget

如何从库存OS X系统上的Un*x shell脚本执行HTTP GET?(安装第三方软件不是一种选择,因为这必须在我无法控制的许多不同系统上运行).

例如,如果我在本地启动Mercurial服务器执行hg服务:

... $ hg serve 
Run Code Online (Sandbox Code Playgroud)

然后,从具有wget命令的Linux 我做一个wget:

... $  wget http://127.0.0.1:8000
--2010-12-31 22:18:25--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... 200 Script output follows
Length: unspecified [text/html]
Saving to: `index.html
Run Code Online (Sandbox Code Playgroud)

在我发起"hg serve"命令的终端上,我确实可以看到HTTP GET成功了:

127.0.0.1 - - [30/Dec/2010 22:18:17] "GET / HTTP/1.0" 200 -
Run Code Online (Sandbox Code Playgroud)

所以在Linux上,从shell脚本执行HTTP GET的一种方法是使用wget(如果当然安装了该命令).

有什么其他方法可以做相当于一个wget?特别是我正在寻找可以在OS X安装上运行的东西.

unix macos shell http-get

473
推荐指数
8
解决办法
51万
查看次数

如何将堆栈跟踪发送到log4j?

假如您执行e.printStackTrace(),则会捕获异常并在标准输出(例如,控制台)上获取以下内容:

java.io.FileNotFoundException: so.txt
        at java.io.FileInputStream.<init>(FileInputStream.java)
        at ExTest.readMyFile(ExTest.java:19)
        at ExTest.main(ExTest.java:7)
Run Code Online (Sandbox Code Playgroud)

现在我想把它发送到一个记录器,比如log4j,以获得以下内容:

31947 [AWT-EventQueue-0] ERROR Java.io.FileNotFoundException: so.txt
32204 [AWT-EventQueue-0] ERROR    at java.io.FileInputStream.<init>(FileInputStream.java)
32235 [AWT-EventQueue-0] ERROR    at ExTest.readMyFile(ExTest.java:19)
32370 [AWT-EventQueue-0] ERROR    at ExTest.main(ExTest.java:7)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

try {
   ...
} catch (Exception e) {
    final String s;
    ...  // <-- What goes here?
    log.error( s );
}
Run Code Online (Sandbox Code Playgroud)

java logging log4j stack-trace

147
推荐指数
6
解决办法
13万
查看次数

如果我不是,那谁正在调用Java Thread interrupt()方法?

我已经阅读并重新阅读了Java Concurrency in Practice,我已经阅读了几个关于这个主题的线程,我已经阅读了IBM文章处理InterruptedException但是有些东西我根本没有抓到我认为可以打破的东西分为两个问题:

  1. 如果我自己永远不会打断其他线程,那么什么可以触发InterruptedException

  2. 如果我从未使用interrupt()中断其他线程(因为我正在使用其他方法来取消我的工作线程,比如毒丸和while(!取消)样式循环[如JCIP中所解释的那样]),那么InterruptedException是什么意思?抓到一个我该怎么办?关闭我的应用程序?

java multithreading exception-handling exception

82
推荐指数
3
解决办法
2万
查看次数

Go是否受到与Java相同的微妙内存泄漏的影响?

以下是事实:

  • 语言Go有一个垃圾收集器.

  • Java有一个垃圾收集

  • 很多Java程序都有(细微的或没有)内存泄漏

作为一个有内存泄漏的Java程序的例子(不是为了胆小的人,这个问题可能会动摇你的信念),请看这里有一个叫做Tomcat的小程序,它甚至有一个"查找泄漏"按钮:有没有办法为了避免Tomcat中的部署内存泄漏?

所以我想知道:用Go编写的程序是否会出现与Java编写的某些程序相同的(细微的或不存在的)内存泄漏?

java memory-leaks go

75
推荐指数
5
解决办法
1万
查看次数

我可以从Dalvik和Android工具链中得到什么样的优化?

我正在开发一个高性能的Android应用程序(游戏),尽管我首先尝试编写可读性代码,但我想在脑海中留下一个关于幕后发生的事情的图片.使用C++,我已经对编译器将为我做什么和不做什么做了很好的直觉.我正在尝试为Java/Android做同样的事情.

因此这个问题.我在网上找不到这个话题.Java编译器,Dalvik转换器(dx)和/或JITter(在Android 2.2+上)是否会执行如下优化?

  • 方法内联.在什么条件下?private方法总是可以安全地内联; 这样做会吗?public final方法怎么样?关于其他类对象的方法?static方法?如果编译器可以轻松推导出对象的运行时类型,该怎么办?我要声明的方法finalstatic在可能的情况?

  • 常见的子表达式消除.例如,如果我访问someObject.someField两次,查找只会进行一次吗?如果它是对吸气剂的召唤怎么办?如果我使用一些算术表达式两次会怎么样 它只会被评估一次吗?如果我使用某些表达式的结果,我知道它的值不会改变,作为for循环的上限,该怎么办?

  • 检查数组查找的边界.工具链是否会在某些条件下消除这种情况,例如原型for循环?

  • 价值内联.访问一些public static final int总是内联?即使他们在另一个班级?即使他们在另一个包裹?

  • 分支预测.这甚至有多大问题?是否会在典型的Android设备上大幅提升性能?

  • 简单算术.将someInt * 2被取代someInt << 1

诸如此类......

java optimization android dalvik

67
推荐指数
3
解决办法
7587
查看次数

instanceof - 不兼容的条件操作数类型

以下编译正常:

  Object o = new Object();
  System.out.println(o instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)

但这不是:

  String s = new String();
  System.out.println(s instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)

抛出编译器错误.

问题是什么?

java instanceof cloneable

54
推荐指数
3
解决办法
4万
查看次数

Java:如何从转义的URL获取文件?

我收到一个找到本地文件的URL(我收到的URL不在我的控制范围内).URL按RFC2396中的定义进行有效转义.如何将其转换为Java File对象?

有趣的是,URL getFile()方法返回一个String,而不是File.

我已经创建了一个名为"/ tmp/some dir"的目录(在"some"和"dir"之间有一个间距字符),它通过以下URL正确定位:"file:/// tmp/some%20dir" (为清楚起见,添加了引号).

如何将该URL转换为Java文件?

要提供有关我的问题的更多详细信息,以下打印为false:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );
Run Code Online (Sandbox Code Playgroud)

而以下(用空格手动替换"%20")打印为true:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );
Run Code Online (Sandbox Code Playgroud)

请注意,我不是在问为什么第一个示例打印为false,为什么使用我的hacky replaceAll的第二个示例打印为true,我问如何将转义的URL转换为Java File对象.

编辑:谢谢大家,这几乎是一个骗局但不完全.

愚蠢的是我在URL类本身中寻找一个帮助方法.

以下按预期从Java URL获取Java文件:

URL url = new URL( "file:///home/nonet/some%20dir" ); …
Run Code Online (Sandbox Code Playgroud)

java url escaping file

45
推荐指数
3
解决办法
5万
查看次数

如果weakCompareAndSet的实现方式与compareAndSet完全相同,那么它如何虚假地失败?

(请注意,这个问题不是关于CAS,而是关于"可能是虚假失败的" Javadoc).

从上述两种方法之间的Javadoc唯一不同的AtomicInteger类就是weakCompareAndSet包含批注:"可能意外失败".

现在,除非我的眼睛受到某些咒语的欺骗,否则这两种方法看起来都是完全一样的:

public final boolean compareAndSet(int expect, int update) {
  return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

/* ...
 * May fail spuriously.
 */
public final boolean weakCompareAndSet(int expect, int update) {
  return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
Run Code Online (Sandbox Code Playgroud)

所以我意识到"May"并不意味着"必须",但为什么我们都不开始将它添加到我们的代码库中:

public void doIt() {
    a();
}

/**
 * May fail spuriously
 */
public void weakDoIt() {
    a();
}
Run Code Online (Sandbox Code Playgroud)

我真的很困惑那个看起来与compareAndSet()相同的weakCompareAndSet(),但是"可能会失败",而另一个则不能.

显然,"弱"和"伪故障"是相关的方式来"之前发生"的排序,但我还是通过这两个的AtomicInteger(和AtomicLong的等)方法很困惑:因为很明显他们称完全一样不安全.compareAndSwapInt方法.

我之所以特别迷茫AtomicIntegerJava 1.5中得到了介绍,所以Java内存模型变化后(所以它显然不是东西,可以"在1.4意外失败" …

java concurrency javadoc

44
推荐指数
1
解决办法
7943
查看次数

易失性保证和无序执行

重要编辑我知道在发生两个赋值的线程中 "发生在之前" 我的问题是,另一个线程是否可能读取"b"非空,而"a"仍为空.所以我知道如果你从与之前调用setBothNonNull(...)的线程相同的线程调用doIt(),那么它就不能抛出NullPointerException.但是如果一个人从另一个线程调用doIt()不是调用setBothNonNull(...)的那个呢?

请注意,这个问题仅仅是对volatile关键字和volatile保证:这是不是synchronized关键字(所以请不要回答"您必须使用同步"因为我没有任何问题要解决:我只是想了解volatile担保关于无序执行(或缺乏保证).

假设我们有一个包含两个volatileString引用的对象,它们被构造函数初始化为null,并且我们只有一种方法来修改两个String:通过调用setBoth(...)并且我们之后只能将它们的引用设置为非null引用(只允许构造函数将它们设置为null).

例如(这只是一个例子,毫无疑问):

public class SO {

    private volatile String a;
    private volatile String b;

    public SO() {
        a = null;
        b = null;
    }

    public void setBothNonNull( @NotNull final String one, @NotNull final String two ) {
        a = one;
        b = two;
    }

    public String getA() …
Run Code Online (Sandbox Code Playgroud)

java volatile java-memory-model

41
推荐指数
2
解决办法
9239
查看次数

避免使用getfield操作码

在Java的String类中,trim方法包含:

int off = offset;      /* avoid getfield opcode */
char[] val = value;    /* avoid getfield opcode */
Run Code Online (Sandbox Code Playgroud)

我对评论"避免getfield操作码"感到有些困惑......

这是什么意思?(我认为这可以避免在字节码中使用getfield,但为什么这是一个Good Thing [TM]?)

难道是防止万一对象创建微调不会做任何事情(因此返回)或?

java bytecode opcode

30
推荐指数
2
解决办法
2569
查看次数