小编sli*_*lim的帖子

过滤node.js中的Stream对象

在我看来,在Node.js中处理某些类型数据的优雅方法是链接处理对象,如UNIX管道.

例如,grep:

function Grep(pattern) {
    ...
}
util.inherits(Grep, stream.Stream);

Grep.prototype.???? = ???????  // What goes here?

grep = new Grep(/foo/);

process.stdin.pipe(grep);
myStream.pipe(process.stdout);
Run Code Online (Sandbox Code Playgroud)

然而,我并不清楚为什么需要重写各种Stream方法才能使其工作.

如何创建简单地从其输入复制到其输出的Stream对象?据推测,更复杂的过滤流变得微不足道.

更新:感觉好像以下应该有效(用CoffeeScript表示,所以我不用JS语法填充这个框!):

class Forwarder extends stream.Stream
    write: (chunk, encoding) ->
        @emit 'data', chunk
    end: (chunk, encoding) =>
        if chunk?
            @emit 'data', chunk
        @emit 'end'

fwd = new Forwarder()
fwd.pipe(process.stdout);
process.stdin.pipe(fwd);
process.stdin.resume();
Run Code Online (Sandbox Code Playgroud)

但是,在此脚本中捕获内容不会输出任何内容.在脚本中显式调用'fwd.write()'会导致stdout输出.

streaming javascript-events node.js

6
推荐指数
1
解决办法
4453
查看次数

iText PDF中的Unicode字符

我需要iText的帮助我看一些谷歌的结果和一些在这里,但没有找到任何适合我的东西.我需要在我的pdf中使用波兰字符,但我什么都没有.如果需要在评论中写下其他内容,我认为这是一个很重要的代码:

private static Font bigFont = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD);
Run Code Online (Sandbox Code Playgroud)

另一个

Paragraph par = new Paragraph(?abadzak, bigFont);
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我该怎么做才能使这个Ł在pdf和其他波兰人角色中可见

更新 我资助这个,但不知道如何使用它作为我的项目 波兰字符在itext PDF中

java swing itext special-characters

6
推荐指数
2
解决办法
8881
查看次数

使用QueudSynchronizer实现CountLatch有什么好处

CountLatch是一种线程控制机制,通过调用await()CountLatch对象可以阻塞线程(或多个线程),当对象的countDown()方法被调用多次时,该对象将释放.

因为我熟悉与线程控制的概念wait(),并notify()有一个(我)明显实现CountLatch的,就像这样:

private volatile int count; // initialised in constructor

public synchronized void countDown() {
   count--;
   if(count <= 0) {
       notifyAll();
   }
}

public synchronized void await() throws InterruptedException {
    while(count > 0) {
        wait();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,Java 5提供了自己的实现,java.util.concurrent.CountLatch它使用了扩展自的内部类AbstractQueuedSynchronizer.

private static final class Sync extends AbstractQueuedSynchronizer {
    Sync(int count) {
        setState(count);
    }

    int getCount() {
        return getState();
    }

    protected int tryAcquireShared(int acquires) {
        return (getState() == 0) ? …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

6
推荐指数
1
解决办法
88
查看次数

Groovy:为接口委派元类?

使用Groovy的包名约定,我可以拦截对Java方法的Groovy方法调用,如下所示:

package groovy.runtime.metaclass.org.myGang.myPackage

class FooMetaClass extends groovy.lang.DelegatingMetaClass
{
    FooMetaClass(MetaClass delegate)
    {
        super(delegate);
    }

    public Object getProperty(Object a, String key)
    {
        return a.someMethod(key)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我真的创建了类Foo的对象,这可以正常工作:

def myFoo = new Foo()
def fooProperty = myFoo.bar // metaclass invokes myFoo.someMethod("bar")
Run Code Online (Sandbox Code Playgroud)

但是如果Foo是一个接口,我想拦截方法调用它的任何实现呢?

def myFoo = FooFactory.create()   // I don't know what class this will be
fooProperty = myFoo.bar
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以实现这一点,而不需要为每个已知的接口实现提供DelegatingMetaClass?

groovy metaprogramming interface metaclass

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

在不存在的文件上对SFTP"打开"的正确响应

我正在为Apache SSHd编写自定义文件系统类.当客户端尝试get不存在的文件时,我遇到了问题.

我的对象返回doesExist() == false.

这会导致服务器发送SSH_FX_NO_SUCH_FILE数据包以响应SSH_FXP_STAT.

使用OpenSSH客户端,这很好用:客户端报告"找不到文件'/ foo'".

但是,PSFTP(Putty SFTP客户端)对其请求进行管道传输,因此无论对STAT的响应如何,它都会发送一个OPEN数据包.然后它在生成的文件句柄上发送一个READ,它当前在我的代码中导致异常,这导致整个会话终止.

当尝试读取不存在的文件时,服务器响应应该是什么?

对于详细的道歉,这是有问题的Apache代码.我不想修改它 - 我的类是这里的SshFile"文件".但如果Apache代码肯定是错误的,我想我必须给他们一个补丁.

    if (version <= 4) {
       String path = buffer.getString();
       int pflags = buffer.getInt();
       // attrs
       try {
            SshFile file = resolveFile(path);
            if (file.doesExist()) {
                if (((pflags & SSH_FXF_CREAT) != 0) && ((pflags & SSH_FXF_EXCL) != 0)) {
                    sendStatus(id, SSH_FX_FILE_ALREADY_EXISTS, path);
                    return;
                }
            } else {
                if (((pflags & SSH_FXF_CREAT) != 0)) {
                    if (!file.isWritable()) {
                        sendStatus(id, SSH_FX_FAILURE, "Can not create " + …
Run Code Online (Sandbox Code Playgroud)

ssh sftp protocols

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

画布不允许绘图

我想从整个屏幕到TForm1画布绘制一个屏幕截图。

该代码在Delphi XE3中运行良好

procedure TForm1.Button1Click(Sender: TObject);
var
  c,scr: TCanvas;
  r,r2: TRect;
begin

  c := TCanvas.Create;
  scr := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try

    r := Rect(0, 0, 200, 200);
    form1.Canvas.CopyRect(r, c, r);

  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

现在,我想先将屏幕快照复制到另一个画布。有没有办法做到这一点而不会出现此错误?

procedure TForm1.Button1Click(Sender: TObject);
var
  c,scr: TCanvas;
  r,r2: TRect;
begin

  c := TCanvas.Create;
  scr := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try

    r := Rect(0, 0, 200, 200);

    scr.CopyRect(r,c,r); <-- Error, canvas does not allow drawing
    form1.Canvas.CopyRect(r, scr, r); <-- Error, canvas does not allow drawing …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe3

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

在Java/Swing中更改助记符修饰键

在Swing中设置焦点热键非常简单:

  tfldPlantsNeeded = new JTextField( FIELD_LEN_MED );
  lblPlantsNeeded = new JLabel( "Plants Needed" );
  lblPlantsNeeded.setDisplayedMnemonic( 'p' );
  lblPlantsNeeded.setLabelFor( tfldPlantsNeeded );
Run Code Online (Sandbox Code Playgroud)

这将tfldPlantsNeeded在用户按下时将焦点放在JTextField上ALT+p.它还会突出显示/显示将触发焦点变化的角色.(在这种情况下,ALT按下时,"植物"中的'P'加下划线.)

这很棒......好吧,有点儿.在Mac上,当用户按下时ALT(也在OptionMac键盘上),助记符处于高位,但是在p按下时也不会触发焦点更改.但是,如果用户按下Control + Option + p,则其工作为"预期"并且焦点被改变.(另外,如果用户按下Option + p,则当前聚焦的文本字段将插入有趣的字符.)

我知道我可以通过getInputMap和指定自定义键绑定来自己做getActionMap,但有没有办法更改应用程序全局助记符修饰符,以便我们可以使用自动键绑定和触发字符突出显示?(就我而言,我想使用CommandMeta作为助记符修饰键.)

java user-interface swing mnemonics

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

Java中何时出现"无法访问的代码"?

当在无限循环之后写入某些语句时,该语句将成为无法访问的代码.例如:

for(;;) 
{
}
Sytem.out.println("Test-1"); //unreachable code
Run Code Online (Sandbox Code Playgroud)

但我在这里面临一些困难.

请看下面的两个代码段:

代码片段1:

for(final int z=4;z<6;)
{
}
System.out.println("Test-2"); //unreachable code
Run Code Online (Sandbox Code Playgroud)

这里,最后一个语句必须是不可达的,因为循环是无限的,输出是预期的.

代码片段2:

final int z=4;
for(;;)
{
    if(z<2)
        break;
}
System.out.println("Test-3");  //not unreachable
Run Code Online (Sandbox Code Playgroud)

从概念上讲,上面代码中的for循环也是无限的,因为z是final,并且if(z<2)仅在编译时确定.if条件永远不会为真且循环永远不会中断.但是,上面代码中的Last语句是无法访问的.

问题:

  1. 为什么会这样?

  2. 任何人都可以告诉我确切的规则,我们可以看到代码是否无法访问.

java unreachable-code

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

JBehave - 运行单个场景

我的情况是这样的:

我有一个包含多个场景的 JBehave 故事。每个场景都会写入一些文件,检查它们是否符合预期。然后@BeforeScenario下一个场景会导致框架删除输出文件。

当某些场景失败时,我只想单独运行该场景——这样我就可以在删除之前方便地检查输出文件(以及速度)。其他人也问过同样的问题,并被告知“使用元过滤” - http://jbehave.org/reference/stable/meta-filtering.html - 这似乎是正确的工具。

但我不想努力用@skip. 我只想用 注释一个场景@wip,然后只运行那个测试。

我试过这个:

Narrative:
An example story

Scenario: A scenario I don't want to run this time
Given foo
When bar
Then baz

Meta: @wip
Scenario: A scenario that is work in progress
Given foo
When bar
Then baz
Run Code Online (Sandbox Code Playgroud)

...然后我用这样的Embedder配置运行:

embedder.useMetaFilters(Arrays.asList("+wip"));
Run Code Online (Sandbox Code Playgroud)

这会导致整个故事被跳过,因为故事不匹配:

1 stories excluded by filter: +wip
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释故事@wip,那么这两种方案都运行,因为这两个继承wip元属性。

有没有一种巧妙的方法来实现这一目标?

java jbehave

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

参数化jUnit测试中的继承(或替代方法)

我想在jUnit中做这样的事情:

@Runwith(Parameterized.class)
public abstract class BaseTest {

     protected abstract List<Object[]> extraParams();
     protected abstract ClassUnderTest testObject;

     @Parameters
     public Collection<Object[]> data() {
         List<Object> params = ...; // a standard set of tests
         params.addAll(extraParams());
         return params;
     }

     @Test
     public doTest() {
         // assert things about testObject
     }
}

public class ConcreteTest extends BaseTest {
     protected ClassUnderTest = new ConcreteClass(...);
     protected List<Object[]) extraParams() {
         List<Object> extraParams = ...; // tests specific to this concrete type
         return extraParams;
     }
}
Run Code Online (Sandbox Code Playgroud)

因此,通过扩展此类,我针对被测对象运行了一系列标准测试,以及具体类中指定的一些额外测试。

但是,jUnit要求该@Parameters方法是静态的。我还能如何巧妙地达到在具体的类中拥有一组标准参数和额外参数的目标?

到目前为止,我想出的最好的办法是 …

java junit parameterized

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