小编Cer*_*ber的帖子

要汇集还是不汇集java加密服务提供商

  • MessageDigest =>根据需要经常创建新实例
  • KeyFactory =>使用单个共享实例
  • SecureRandom =>使用StackObjectPool
  • Cipher =>使用StackObjectPool

在编写安全框架时,我面临着一个常见的困境:"汇集或不汇集"

基本上这个问题分为两个"群体":

  1. 第1组:SecureRandom因为调用nextBytes(...)是同步的,它可能成为WebApp /多线程应用程序的瓶颈

  2. 第2组:加密服务提供商,如MessageDigest,Signature,Cipher,KeyFactory,...(因为的成本getInstance()?)

你有什么意见 ?

你在这些问题上的习惯是什么?

编辑09/07/2013

我终于花时间自己测试了@Qwerky Share课程,我觉得结果很......令人惊讶.

这个类缺乏我的主要关注:像GenericObjectPoolStackObjectPool这样的池.

所以我重新修改了这个类以测试所有4种选择:

  • 具有同步gist的单个共享实例
  • 每个环内的新实例(我不感兴趣的情况下,当你可以拉外循环摘要创建)要点
  • GenericObjectPool:要点
  • StackObjectPool:要点

我不得不将循环次数降低到100000,因为1M花了太多时间在游泳池上.

我还在Thread.yield()每个循环的末尾添加了一个,以使负载具有更好的形状.

结果(累积运行时):

  • 信息摘要
    • 新实例:420秒
    • 单个实例:550秒
    • StackObjectPool:800秒
    • GenericObjectPool:1900年代
  • 的KeyFactory
    • 新实例:400s
    • 单个实例:350秒
    • StackObjectPool:2900秒
    • GenericObjectPool:3500秒
  • 的SecureRandom
    • StackObjectPool:1600秒
    • 新实例:2300秒
    • GenericObjectPool:2300s
    • 单个实例:2800秒
  • 暗号
    • StackObjectPool:2800秒
    • GenericObjectPool:3500秒
    • 单个实例:5100秒
    • 新实例:8000秒 …

java pool

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

ContainerResponseFilter无法正常工作

在带有REST服务的wildfly 8.1中,我想实现CORS ContainerRequestFilter和ContainerResponseFilter.

我的请求过滤器工作正常但ContainerResponseFilter从未加载或调用

package org.test.rest;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.ext.Provider;

@Provider 
@PreMatching // <-- EDIT : This was my mistake ! DO NOT ADD THIS
public class CorsResponseFilter implements ContainerResponseFilter {
    public CorsResponseFilter() {
        System.out.println("CorsResponseFilter.init");
    }

    @Override
    public void filter(ContainerRequestContext req,
            ContainerResponseContext resp) throws IOException {
        System.out.println("CorsResponseFilter.filter");
        resp.getHeaders().add("Access-Control-Allow-Origin", "*");
        resp.getHeaders().add("Access-Control-Allow-Credentials", "true");
        resp.getHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, DELETE, PUT");
        resp.getHeaders().add("Access-Control-Allow-Headers",
                "Content-Type, Accept");
    }

}
Run Code Online (Sandbox Code Playgroud)

这在我看来是一个Wildfly/resteasy bug.你有另一个想法/我错过了什么吗?

resteasy wildfly-8

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

如何在mattermost中添加链接预览?

如何在mattermost中添加链接预览功能?

添加包含链接的帖子时,我希望最重要的是自动添加链接内容的预览

mattermost

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

如何将StreamEx解包为"普通的旧Java流"?

StreamEx是一个功能强大的库,但在某些时候我不再需要它的超级大国了.

我怎么能摆脱StreamEx内部开销?这会造成问题吗?

防爆.

public void process(Path path){
    StreamEx.of(Files.lines(path))
        .groupRuns(...)
        //See below 
        .unwrap()
        //
        .map(...)
        .forEach(...)
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream streamex

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

为什么不能并行减少流的流?/ stream已经被操作或关闭

上下文

我偶然发现了一个相当烦人的问题:我有一个包含大量数据源的程序,它能够传输相同类型的元素,并且我想"映射"程序中的每个可用元素(元素顺序不物).

因此我试图将我Stream<Stream<T>> streamOfStreamOfT;简化为简单的Stream<T> streamOfT;使用streamOfT = streamOfStreamOfT.reduce(Stream.empty(), Stream::concat);

由于元素顺序对我来说并不重要,我尝试将reduce操作并行化为.parallel():streamOfT = streamOfStreamOfT.parallel().reduce(Stream.empty(), Stream::concat);但是这会触发一个java.lang.IllegalStateException: stream has already been operated upon or closed

要亲自体验它,只需通过注释/取消注释即可使用以下主要内容(java 1.8u20) .parallel()

public static void main(String[] args) {
    // GIVEN
    List<Stream<Integer>> listOfStreamOfInts = new ArrayList<>();
    for (int j = 0; j < 10; j++) {
        IntStream intStreamOf10Ints = IntStream.iterate(0, i -> i + 1)
                .limit(10);
        Stream<Integer> genericStreamOf10Ints = StreamSupport.stream(
                intStreamOf10Ints.spliterator(), true);
        listOfStreamOfInts.add(genericStreamOf10Ints);
    }
    Stream<Stream<Integer>> streamOfStreamOfInts = listOfStreamOfInts
            .stream(); …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

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