小编jol*_*ier的帖子

循环包含空格的字符串集

我有多个字符串,如"a b","c d","foo bar"等.我想循环遍历这组字符串并对其中的每一个执行操作.在这个动作中,我调用了多个其他脚本,所以我不想为这个循环更改IFS,因为它可能会破坏我对其他脚本的调用.这就是为什么我试图逃避这些字符串中包含的空格但没有成功.

所以我希望得到

a b
c d
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

#!/bin/sh

x="a b"
y="c d"

echo "Attempt 1"
all="$x $y"

for i in $all ; do
  echo $i
done

echo "Attempt 2"
all="a\ b c\ d"
for i in $all ; do
  echo $i
done

echo "Attempt 3"
all=($x $y)
for i in ${all[@]} ; do
  echo $i
done

echo "Attempt 4"
all='"'$x'" "'$y'"'
for i in $all ; do
  echo $i
done

echo "Attempt 5"
for i in "$x" …
Run Code Online (Sandbox Code Playgroud)

bash

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

BitmapFactory意外地下采样图像

在我的Android应用程序中,我上传并下载JPEG图像.对于某些图像BitmapFactory下采样下载的图像,我不明白为什么以及如何阻止它这样做.我上传和下载图像时记录Bitmap对象大小:

Uploading image with size 3840x2160 Opening received image of size 2601584B degradation 0 decoded 384x216

所以这里我的图像宽度和高度在解码后除以10 BitmapFactory.对于另一个图像,我从3480x4640到217x290,因此除以16.我首先想到它可能是由图像dpi元数据引起的,所以我尝试使用以下代码打开图像时强制它:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 1 << degradation;
opts.inScaled = false;
opts.inDensity = 1;
opts.inTargetDensity = 1;
opts.inScreenDensity = 1;
final Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
Log.d(Tags.IMAGES, "Opening received image of size " + data.length + " degradation " + degradation + " decoded " + original.getWidth() + "x" + original.getHeight());
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我给出的字节数(2MB)BitmapFactory与没有300x200px图像的大图像一致.所以我的上传代码和下载代码是正确的我在解码之前有正确的数据.

我强制所有密度以避免缩放并禁用缩放,我的样本大小为1,因为我的降级为0所以我不强制进行任何子采样.我仍然以一个非常小的图像结束.并 …

android bitmapfactory android-bitmap

11
推荐指数
1
解决办法
204
查看次数

如何使用Casbah清除/删除/清空MongoDb集合

我开始在Scala通过Casbah使用MongoDb,但无法在Casbah文档/ google上找到删除集合内容的方法.该MongoDd医生说MongoDB的shell命令这样做是

db.things.remove({}); 
Run Code Online (Sandbox Code Playgroud)

但是我们如何通过Casbah实现同样的目标呢?

提前致谢,

奥利维尔

scala mongodb casbah

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

sbt web plugin:不是有效密钥:jetty-run(类似:jetty-port,jetty-context,run)

我正在尝试使用电梯网框架建立一个scala sbt项目.我正在使用

  • 斯卡拉2.9.0-1
  • sbt 0.10.1
  • 电梯2.3
  • xsbt-web-plugin 0.1.1(仅在scala 2.8.1上,见问题末尾)

(我知道最近的版本).我按照http://d.hatena.ne.jp/k4200/20110711/1310354698https://github.com/siasia/xsbt-web-plugin/blob/master/README.md获取以下sbt配置文件:

项目/ build.properties

sbt.version=0.10.1

项目/插件/ build.sbt

resolvers += "Web plugin repo" at "http://siasia.github.com/maven2"

libraryDependencies <+= sbtVersion(v => "com.github.siasia" % "xsbt-web-plugin_2.8.1" % ("0.1.1-"+v))
Run Code Online (Sandbox Code Playgroud)

项目/ Build.scala

import sbt._
import Keys._

object BuildSettings {
  val buildOrganization = "xbaz"
  val buildScalaVersion = "2.9.0-1"
  val buildVersion      = "0.0.1"

  val buildSettings = Defaults.defaultSettings ++ Seq (
    organization := buildOrganization,
    scalaVersion := buildScalaVersion,
    version      := buildVersion)
}

object Resolvers {
  val webPluginRepo = "Web …
Run Code Online (Sandbox Code Playgroud)

scala sbt xsbt-web-plugin

7
推荐指数
1
解决办法
4545
查看次数

原子包类如AtomicInteger等如何工作

我已经读过使用原子包类使我们能够做到线程安全,锁定更少的编码.但我不太确定原子包类中的方法如何在没有使用锁或任何synchronize关键字的情况下提供线程安全性.任何帮助都应该受到赞赏.

java multithreading

7
推荐指数
1
解决办法
1602
查看次数

阻止java将JAVA_TOOL_OPTIONS输出到stderr

当我的环境变量为JAVA_TOOL_OPTIONS定义非空值时,jvm将其内容打印到标准错误,这会破坏一些构建工具,这些工具依赖于stderr的空白来判断构建是否成功.这可以通过编写一个非常简单的hello world类来运行并运行:

JAVA_TOOL_OPTIONS="-Dfoo=bar" java HelloWorld > /dev/null    
Run Code Online (Sandbox Code Playgroud)

你通常会看到一个输出,这不是一个真正的错误,所以我不明白为什么它在stderr中出现.所以有可能有一种方法来禁用这种行为,但我找不到任何东西.

我使用的是1.7.0_45 jre.

java stderr

5
推荐指数
0
解决办法
241
查看次数

Java集合仅保留最后插入的成员

正如标题所述,我正在寻找一个java集合,只保留插入集合中的N个最后一个对象.此FIFO集合不需要实现随机访问或支持更改N.

我能找到的所有集合都是阻塞(LinkedBlockingQueue)或无限大小(ArrayDeque).我找到了org.eclipse.jetty.util.ArrayQueue,但你可能会猜到这会给我的项目带来很多不必要的依赖,而且非常复杂,因为它支持更改N所以它不是我需要的.

你知道是否有一种方法可以使用一个非常常见的java库,或者我必须自己编写它?

java collections

4
推荐指数
1
解决办法
915
查看次数

破坏单元测试的语义

我正在为我们的主要产品编写单元测试,并且有一个问题:如何区分

  • 测试失败,因为他们测试的是错误的(发现了一个错误,例如它的非回归测试)
  • 测试失败,因为测试的另一个意外部分失败(因为测试错误或出现未知错误)

对于第一个,我们肯定有jUnit Assert框架,但是对于第二个框架我们有什么?

示例:我的单元测试是测试c()不会抛出MyException,但是为了执行c()我需要首先执行a()然后b(),它们都可以抛出MyException(),所以我会写:

@Test
public void testC() {
  a();
  Object forC = b();
  try {
    c(forC);
  } catch (MyException e) {
    Assert.fail("....");
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我需要处理可以被a或b抛出的MyException,并且还要处理forC不应该为null的事实.做这个的最好方式是什么?

  • 捕获由a或b和Assert.fail抛出的MyException,但是a和b未经过此测试的测试,因此对我来说,它们在失败时不应被标记为测试失败.也许他们以后失败了,因为此时我们应该做b(); a()而不是a(); b();.
  • 让testC抛出MyException,以便测试将以"MyException"失败,但这是误导性的,因为MyException不会告诉测试写错了.然后所有测试都将失败,每个测试都有自己的异常.在这种情况下,如果forC为null,我也需要抛出类似NullPointerException的东西,它也没有语义.
  • 捕获并将由a和b抛出的MyException包装成异常,告知测试可能是错误的,如TestCorruptedException.但我无法在jUnit中找到这样的异常,因此jUnit不会识别它们(这对我来说没问题).此外,我需要从我的所有单元测试中了解这个异常,当然这些单元测试分为多个模块,项目等等......所以这是可行的但是增加了依赖性.

你对这个问题的解决方案是什么?我可能会选择第二个,但我对它不满意,如上所述.

java junit unit-testing

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

Map <String,List <?在Scala中扩展T >>

在我的用例中,我有一个具有协变类型Foo [+ T]的类和类A <:T,B <:T,C <:T,我需要存储一个地图"A" - >一个Foo [A]实例,"B" - >一个Foo [B]实例和"C" - >一个Foo [C]实例,这在scala中可能吗?

目前我将我的地图声明为Map [String,Foo [T]]]但是我不能在里面添加一个Foo [A],编译器告诉我Foo [T]是预期的,而不是Foo [A ],这似乎是由Map参数缺乏协方差引起的,是否有解决方案?

我现在的解决方法是取消参数化Foo并在代码中进行转换,这当然不讨好我,我也看到我可以使用java集合但我更喜欢使用scala.

在此先感谢您的时间

scala covariance scala-collections

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

如何在scala类中重写type()java接口方法

我有一个java接口,其方法声明如下String type();.我想在scala类中实现它,所以我想写:

override def type = { ... }
Run Code Online (Sandbox Code Playgroud)

但显然它是scala中的保留关键字,所以编译器抱怨:

 identifier expected but 'type' found.
Run Code Online (Sandbox Code Playgroud)

怎么可能实现它?有没有更改Java接口的解决方案?

java scala reserved-words

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

DELETE_ON_CLOSE在Linux上关闭之前删除文件

我使用Java 7 nio API获得以下代码:

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class TestDeleteOnClose {

    public static void main(String[] args) throws IOException {
        Path tmp = Files.createTempFile("a", "b");
        OutputStream out = Files.newOutputStream(tmp, StandardOpenOption.DELETE_ON_CLOSE);

        ObjectOutputStream os = new ObjectOutputStream(out);

        os.write(0);

        os.flush();
        System.out.println(Files.exists(tmp));
        os.close();
        System.out.println(Files.exists(tmp));
    }
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,我看到了我的期望,即true false.在Linux上我看到了false false.这是预期的吗?难道我做错了什么?文件被过早删除的事实是有问题的,因为我需要测试它的大小,例如在写入之后.

我在Linux和Windows上使用jdk7u25,并且可以在具有RedHat或ArchLinux的机器上重现.

编辑:即使我在另一次调用os.write()之前测试文件是否存在,我被告知该文件不再存在.如果我用CREATE选项打开文件,那么我会看到true true.

java linux nio

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

即使文件中仍有数据,ObjectOutputStream.readInt() 也会抛出 EOFException

我们的应用程序中有一个问题,可以简化为以下代码:

public static void main(String[] args) throws IOException, ClassNotFoundException {
        File tempFile = File.createTempFile("teststream", "");
        FileOutputStream fos = new FileOutputStream(tempFile);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeInt(1);
        oos.writeObject("foo");
        oos.writeInt(2);
        oos.flush();
        oos.close();
        FileInputStream fis = new FileInputStream(tempFile);
        ObjectInputStream ois = new ObjectInputStream(fis);
        int n1 = ois.readInt();
        Object o1 = ois.readObject();
        int n2 = ois.readInt();
    }
Run Code Online (Sandbox Code Playgroud)

此代码有效,但如果您注释以下行:

Object o1 = ois.readObject();
Run Code Online (Sandbox Code Playgroud)

以下行

int n2 = ois.readInt();
Run Code Online (Sandbox Code Playgroud)

EOFException尽管我的文件中有数据,但会抛出一个,因为我在其中写入了一个对象和一个整数。readIntjavadoc没有表明这种行为。我对此有点担心EOFException,因为我们想在我们的代码中区分真实的文件异常和错误类型的内容异常。

异常的堆栈跟踪是

Exception in thread "main" …
Run Code Online (Sandbox Code Playgroud)

java exception

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