小编Dav*_*les的帖子

用于进度报告的InputStream或Reader包装器

所以,我正在将文件数据提供给需要a的API,Reader我想要一种报告进度的方法.

看起来应该直截了当地编写一个FilterInputStream包装的实现,FileInputStream跟踪读取的字节数与总文件大小,并触发一些事件(或调用某些update()方法)来报告小数进度.

(或者,它可以报告绝对字节读取,而其他人可以进行数学计算 - 在其他流式传输情况下可能更常用.)

我知道我以前见过这个,我甚至可能以前做过,但我找不到代码,而且我很懒.有没有人得到它?或者有人可以提出更好的方法吗?


一年(有点)之后......

我在下面根据Adamski的答案实施了一个解决方案,并且它有效,但经过几个月的使用后我不推荐它.当您有大量更新时,解雇/处理不必要的进度事件会产生巨大的成本.基本的计数机制很好,但是对于那些关心进展调查的人来说要好得多,而不是把它推到他们身上.

(如果你知道总的大小,你可以尝试每隔1%的变化或者其他任何事情来发射一个事件,但这不值得麻烦.通常,你没有.)

java inputstream java-io

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

IDEA在尝试解析spray-template的build.sbt文件时抱怨Revolver.settings

on_spray-can_1.1按照Spray的" 入门 "页面上的建议克隆了Spray模板项目(分支),并使用sbt-idea生成相应的IDEA项目.它建立得很好,但是当我打开我的build.sbt文件时,最后一行让IDEA不高兴:

seq(Revolver.settings: _*)
Run Code Online (Sandbox Code Playgroud)

它不承认Revolver,并建议进口spray.revolver.RevolverPlugin.Revolver,这似乎是合理的.但是,当我这样做时,它仍然抱怨"表达式类型(Def.SettingsDefinition)必须符合SBT文件中的设置[_]".

显然,这不是一个真正的问题,或者IDEA的(外部)make会失败,和/或SBT会从命令行中抱怨.但为什么IDEA认为这是一个问题?最近版本的SBT有什么变化吗?

当我看到SBT 0.13.0源代码时,我注意到seq它已被弃用; 它说"在build.sbt文件中,可以删除此调用." 但是,如果我这样做,Revolver会停止工作("不是有效命令:重新启动").

FWIW,我在Scint 2.10.3上使用SBT 0.13.0,在Mint 14上使用IDEA 12.1.6.

intellij-idea sbt spray

10
推荐指数
1
解决办法
1803
查看次数

如何在Swift中"追加"到不可变字典?

在Scala中,+ (k -> v) 运算符on immutable.Map返回包含immutable.Map原始内容的新内容以及新的键/值对.同样,在C#中,ImmutableDictionary.add(k, v)返回一个新的,更新的ImmutableDictionary.

然而,在Swift中,Dictionary似乎只有变异updateValue(v, forKey: k)函数和变异[k:v]运算符.

我想也许我可以玩一些技巧flatten(),但没有运气:

let updated = [original, [newKey: newValue]].flatten()
Run Code Online (Sandbox Code Playgroud)

抓住我

Cannot convert value of type '() -> FlattenCollection<[[String : AnyObject]]>' 
to specified type '[String : AnyObject]'
Run Code Online (Sandbox Code Playgroud)

如何Dictionary从现有内容创建一个新的,修改过的不可变的?


更新:根据这个答案的说明,Swift字典是值类型,这个答案的可变版本,我想出了以下扩展运算符,但我对此并不感兴趣 - 似乎必须有一个更清洁的开箱即用的替代方案.

func + <K, V>(left: [K:V], right: [K:V]) -> [K:V] {
    var union = left
    for (k, v) in right …
Run Code Online (Sandbox Code Playgroud)

functional-programming immutability swift

10
推荐指数
1
解决办法
2875
查看次数

Nils和方法链接

我刚刚进入红宝石世界,我可以伸出援助之手.

假设bnil.

我想要返回以下代码nil而不是"NoMethodError:undefined method"

a.b.c("d").e
Run Code Online (Sandbox Code Playgroud)

我尝试的第一件事是重载NilClass的missing_method只是返回一个零.这是我想要的行为,除了我不想成为这种侵扰.

如果我能做到这样的话,我会喜欢它

SafeNils.a.b.c("d").e
Run Code Online (Sandbox Code Playgroud)

所以它就像是一种干净的方式来本地重载NilClass的行为.

我很想听到一些想法或很多资源来挖掘这个.只要它相当干净,我也对其他方法持开放态度.

非常感谢你.

ruby null metaprogramming ruby-on-rails

9
推荐指数
3
解决办法
2696
查看次数

如何在字符类中包含](右括号)

我想创建一个否定的字符类来匹配像[方括号标记]这样的方括号标记.问题是,]字符结束了角色类!

我试过了

\[[^\]]+]
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时出现语法错误.(这是在查找和替换正则表达式引擎,它与标准的.NET引擎fyi略有不同).

regex visual-studio-2010

9
推荐指数
1
解决办法
3041
查看次数

在C#中测试参照平等的通用集合是一个愚蠢的想法吗?

我正在实现一个不可变字典的特例,为了方便实现IEnumerable<KeyValuePair<Foo, Bar>>.通常修改字典的操作应该返回一个新实例.

到现在为止还挺好.但是当我尝试为类编写一个流畅的单元测试时,我发现我尝试过的两个流畅的断言库(ShouldFluent Assertions)都不支持对NotBeSameAs()实现的对象的操作IEnumerable- 除非你第一次执行他们来Object.

当我第一次碰到这个时,我认为它只是框架中的一个洞,但当我看到Fluent Assertions有同样的洞时,它让我觉得(因为我是C#的相对新人)我可能会遗漏一些关于C#集合的概念 - 当我提交问题时,应该隐含的作者.

显然还有其他方法来测试这个 - 投射Object和使用NotBeSameAs(),只是使用Object.ReferenceEquals,无论如何 - 但如果有充分的理由不这样做,我想知道那是什么.

c# collections equality fluent-assertions

9
推荐指数
1
解决办法
258
查看次数

Swift:覆盖采用NSInvocation的初始化程序

我正在尝试在Swift中创建一个可重用的测试工具,其想法是子类将扩展测试工具以提供测试中的实例,并且可以添加他们自己的子类特定的测试方法,如下所示:

class FooTestHarness: XCTestCase {
  let instance: Foo

  init(instance: Foo) {
    self.instance = instance
  }

  func testFooBehavior() {
    XCTAssert(instance.doesFoo())
  }
}

class FooPrime: Foo {
  func doesFooPrime(): Bool { /* ... */ }
}

class FooPrimeTests: XCTestCase {

  init() {
    super.init(FooPrime())
  }

  func myInstance(): FooPrime {
    return instance as FooPrime
  }

  func testFooPrimeBehavior() {
    XCTAssert(myInstance().doesFooPrime())
  }

}
Run Code Online (Sandbox Code Playgroud)

但是,当XCode的testrunner尝试运行时FooPrimeTests,它不会调用no-arg init(),它会调用init(invocation: NSInvocation!)(并且因为没有调用而失败).我试图覆盖这个FooTestHarness:

  init(invocation: NSInvocation!, instance: Foo) {
    self.instance = instance
    super.init(invocation)
  }
Run Code Online (Sandbox Code Playgroud)

并在FooPrimeTests: …

nsinvocation swift

9
推荐指数
1
解决办法
1453
查看次数

Gemfile.lock始终具有未提交的更改

我正在努力的rails应用程序上遇到这个问题.我正在开发一个功能分支,并希望从最新的主人那里重新定义.我运行了以下命令:

$ git checkout master
$ git pull --rebase
Run Code Online (Sandbox Code Playgroud)

如果我尝试检出我的功能分支,我会收到以下错误:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

  modified:   Gemfile.lock
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令将Gemfile.lock解析回aster,但没有一个成功:

$ git checkout -- Gemfile.lock
$ git stash
$ git reset HEAD --hard
Run Code Online (Sandbox Code Playgroud)

每次我运行一个新的git命令时,我都会回到Gemfile.lock,其中的更改没有为commit提交.

以下是我正在使用的以下版本的库:

$ git --version => 2.3.3
$ bundler --version => 1.7.9
Run Code Online (Sandbox Code Playgroud)

ruby git bundler gemfile.lock

9
推荐指数
2
解决办法
2702
查看次数

在水豚中选择单选按钮的主要方法是什么?

我正在尝试为自由职业者选择单选按钮,代码如下(当我们在浏览器上检查元素时)

<label for="registration_payer_type_business"><input checked="checked" id="registration_payer_type_business" name="registration[payer_type]" type="radio" value="business">
          Company
          </label>

<label for="registration_payer_type_freelancer"><input id="registration_payer_type_freelancer" name="registration[payer_type]" type="radio" value="freelancer">
          Freelancer
          </label>
Run Code Online (Sandbox Code Playgroud)

我试过了

page.choose("registration_payer_type_freelancer")
Run Code Online (Sandbox Code Playgroud)

这不会给出任何错误,但是当在水豚中保存和打开页面时,仍然没有选择对抗自由职业者的广播框.如果人们可以使用xpath给出示例并选择,我将不胜感激.

rspec capybara rspec-rails ruby-on-rails-4

9
推荐指数
1
解决办法
5473
查看次数

如何用Java创建ZIP文件?

与此jar命令等效的Java是什么:

C:\>jar cvf myjar.jar directory
Run Code Online (Sandbox Code Playgroud)

我想以编程方式创建这个jar文件,因为我不能确定该jar命令将位于我可以运行外部进程的系统路径上.

编辑:我想要的只是归档(和压缩)一个目录.不必遵循任何java标准.即:标准拉链很好.

java zip

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