小编ric*_*dtz的帖子

nodejs垃圾收集输出

任何人都知道我在哪里可以读到nodejs中--trace-gc选项的输出?

我不是要求解释gc是如何工作的,因为有很多关于它的信息,只是为了输出-trace-gc.

我可以猜到一些领域的含义是什么,但我不知道其他一些领域.

例如 :

  • 括号中数字的含义是什么,
  • "步骤"meaining(它可能与增量标记和懒惰扫描有关)
  • 写入的堆的大小是总堆?(添加年轻和旧区域)
  • ...

一个例子 :

[12994]    77042 ms: Scavenge 260.7 (298.1) -> 247.7 (298.1) MB, 9.4 ms [allocation failure].
[12994]    77188 ms: Scavenge 261.7 (298.1) -> 249.0 (300.1) MB, 7.4 ms [allocation failure].
[12994]    77391 ms: Scavenge 263.8 (301.1) -> 250.6 (302.1) MB, 8.1 ms [allocation failure].
[12994]    77511 ms: Scavenge 264.8 (302.1) -> 251.8 (304.1) MB, 7.4 ms [allocation failure].
[12994]    77839 ms: Scavenge 273.4 (304.1) -> 260.7 (305.1) MB, 8.3 ms (+ …
Run Code Online (Sandbox Code Playgroud)

garbage-collection v8 node.js

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

解密错误:"当预期时没有设置iv"

我几乎不熟悉加密.

我正在尝试解密一个字节数组,当我提供IV时,我得到一个异常:InvalidAlgorithmParameterException(当预期时没有设置iv).

这是我的代码(iv是一个16字节的数组,它不是null,并且具有加密时使用的值):

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, encriptionKey,new IvParameterSpec(iv));
Run Code Online (Sandbox Code Playgroud)

如果我没有指定IV,则密码初始化为ok:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, encriptionKey);
Run Code Online (Sandbox Code Playgroud)

试图找到答案我找到了JCEStreamCipher(这里)的实现,这可能与我正在使用的版本不对应,但有一些代码使我对我的理解不正确.

这是代码:

   if ((ivLength != 0) && !(param instanceof ParametersWithIV))
    {
        SecureRandom    ivRandom = random;

        if (ivRandom == null)
        {
            ivRandom = new SecureRandom();
        }

        if ((opmode == Cipher.ENCRYPT_MODE) || (opmode == Cipher.WRAP_MODE))
        {
            byte[]  iv = new byte[ivLength];

            ivRandom.nextBytes(iv);
            param = new ParametersWithIV(param, iv);
            ivParam = (ParametersWithIV)param;
        }
        else
        {
            throw new InvalidAlgorithmParameterException("no IV set when one expected"); …
Run Code Online (Sandbox Code Playgroud)

java android cryptography

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

在android中注册新的mime类型

这与如何在电子邮件应用程序中使用我的应用程序打开附件有关?(哑剧类型,意图过滤器...),我以为我已经解决了,但事实并非如此.

我发现一些电子邮件客户端(例如,内置在电子邮件客户端中的Samsung Galaxy SII)不支持sendIntent.setType()方法,并且在向电子邮件添加附件时,它不添加setType方法中指定的mime类型.结果是当电子邮件到达时我无法打开附件.

因此,为了能够从任何电子邮件客户端打开附件,我认为他们唯一的方法是创建一个与我的自定义扩展相关联的新mime类型.

但我找不到任何方式来注册新的mime类型.我知道它可以像一些应用程序那样完成(ASTRO文件资源管理器),但我不知道在哪里可以查找有关添加新mime类型的信息.

编辑(2012年10月1日) ASTRO文件资源管理器仅为其进程添加mime类型.它们不能在其进程外读取,因此我没有任何可行的示例.

我一直在查看MimeTypeMap源代码,看起来它只使用一组预定义的mime类型,你不能添加一个新的.

我尝试使用反射(只是为了检查)并且能够添加mime类型,但它只对我的进程可见,就好像我的进程有自己的MimeTypeMap副本,因此电子邮件客户端仍然不会打开附件.

有人可以帮忙吗?

提前致谢

email android attachment mime-types

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

json的node.js流数组以进行响应

我有一个REST方法,应该返回一个JSON数组,其中包含从mongodb中读取的某些元素(使用mongoose)。

它应该非常简单(在实际情况下,find方法具有参数,但这不是问题):

OutDataModel.find().stream({transform: JSON.stringify}).pipe(res);
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我没有得到有效的JSON,结果是这样的:

{"id":"1","score":11}{"id":"2","score":12}{"id":"3","score":13}
Run Code Online (Sandbox Code Playgroud)

我期待着这样:

[{"id":"1","score":11},{"id":"2","score":12},{"id":"3","score":13}]
Run Code Online (Sandbox Code Playgroud)

我还没有找到解决方案,但是我很确定会有一个简单的解决方案。

我尝试过的

没有什么让我引以为傲的,但事情就这样了。

  1. 在流之前写入'['响应。
  2. 我提供了另一个方法,而不是JSON.stringify,它调用JSON.stringify并','在末尾添加一个
  3. 在流的“结束”事件中,我写']'了响应。

仍然无法使用此“解决方案”,因为我在末尾有这样一个逗号:

 [{"id":"1","score":11},{"id":"2","score":12},{"id":"3","score":13},]
Run Code Online (Sandbox Code Playgroud)

正如我所说,我很确定应该有一个干净的解决方案,因为这应该很普遍。

此方法将有很多并发调用,因此我不想将所有内容都读取到内存中,然后再将所有内容写入响应中。每次调用都不会返回很多记录,但是所有这些记录在一起可能会非常庞大​​。使用者是一个带有spring的Java应用程序,它使用jackson解析JSON。

请让我知道该怎么做。

回答

通过按照接受的答案中的建议创建一个Transform流,使它起作用。

我的信息流看起来像这样:

var arraystream = new stream.Transform({objectMode: true});
arraystream._hasWritten = false;


arraystream._transform = function (chunk, encoding, callback) {
    console.log('_transform:' + chunk);
    if (!this._hasWritten) {
        this._hasWritten = true;
        this.push('[' + JSON.stringify(chunk));

    } else {
        this.push(',' + JSON.stringify(chunk));
    }
    callback();
};

arraystream._flush = function (callback) {
    console.log('_flush:');
    this.push(']');
    callback();

};
Run Code Online (Sandbox Code Playgroud)

以及使用它的代码:

OutDataModel.find().stream().pipe(arraystream).pipe(res);
Run Code Online (Sandbox Code Playgroud)

谢谢。

arrays rest json node.js node.js-stream

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

android中的灰度位图

我有一个对应于“灰度位图”(一个字节-> 一个像素)的字节数组,我需要为此图像创建一个 PNG 文件。

下面的方法有效,但创建的 png 很大,因为我使用的位图是 ARGB_8888 位图,每个像素需要 4 个字节而不是 1 个字节。

我无法让它与 ARGB_8888 不同的其他 Bitmap.Config 一起工作。也许 ALPHA_8 是我需要的,但我一直无法让它工作。

我也尝试过其他一些帖子中包含的 toGrayScale 方法(在 Android 中将位图转换为灰度),但我对大小有同样的问题。

public static boolean createPNGFromGrayScaledBytes(ByteBuffer grayBytes, int width,
        int height,File pngFile) throws IOException{

    if (grayBytes.remaining()!=width*height){
        Logger.error(Tag, "Unexpected error: size mismatch [remaining:"+grayBytes.remaining()+"][width:"+width+"][height:"+height+"]", null);
        return false;
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    // for each byte, I set it in three color channels.
    int gray,color;
    int x=0,y=0;        
    while(grayBytes.remaining()>0){

        gray = grayBytes.get();
        // integer may be …
Run Code Online (Sandbox Code Playgroud)

android image bitmap image-processing grayscale

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