小编use*_*349的帖子

使用RestTemplate获取InputStream

我正在使用URL类从中读取InputStream.有什么方法可以使用RestTemplate吗?

InputStream input = new URL(url).openStream();
JsonReader reader = new JsonReader(new InputStreamReader(input, StandardCharsets.UTF_8.displayName())); 
Run Code Online (Sandbox Code Playgroud)

我如何InputStream 使用RestTemplate而不是使用URL

java inputstream resttemplate

28
推荐指数
6
解决办法
3万
查看次数

steady_clock和system_clock之间的区别?

我试图通过查看数据的时间戳来查看我的数据是否是120秒旧,所以我有以下代码:

uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
bool is_old = (120 * 1000 < (now - data_holder->getTimestamp()));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中data_holder->getTimestamp()是uint64_t,它返回以毫秒为单位的时间戳.

现在,当我打印出now变量值时,我看到了这一点10011360,当我打印出data_holder->getTimestamp()值时,1437520382241现在的差异和数据持有者时间戳应该是负的吗?为什么它会像下面的日志中显示的那样积极?

2015-07-21 16:13:02,530 WARN 0x7f35312d1700 data_check - now value: 10011360 , data holder timestamp: 1437520382241 , difference: 18446742636199180735
Run Code Online (Sandbox Code Playgroud)

我上面的代码是否正确?从上面的数据持有者时间戳,它看起来不是120秒的旧数据,所以我觉得我的代码有问题吗?因为如果我将数据持有者时间戳转换为实际时间(使用纪元转换器),然后将其与日志时间进行比较,如上所示,它几乎相同.

我正在使用steady_clock如上所示.我需要在system_clock这里使用吗?在外行人的条款中,steady_clockvs 之间有什么区别system_clock.我在Ubuntu 14.04框上运行此代码.

c++ timestamp c++11

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

如何防止数字出现在科学记数法中

我们有一个StreamBuffer课程,我们没有实施std::fixed操作,我试图阻止数字出现在科学记数法中.用我的下面的代码,一些数字以科学记数显示.我们希望避免进行任何分配,这就是我们StreamBuffer因为性能原因而实现类的原因.

以下是代码:

T value = 0;

template<typename U> void process(U& buf, DataOption holder) const {
    if (holder == DataOption::TYPES) {
        switch (type_) {
        case teck::PROC_FLOAT:
            buf << "{\"float\":" << value << "}";
            break;
        case teck::PROC_DOUBLE:
            buf << "{\"double\":" << value << "}";
            break;
        default:
            buf << "{\"" << type_ << "\":" << value << "}";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是它被调用的方式:

void HolderProcess::dump(std::ostream& os, DataOption holder) const 
{
    process<std::ostream>(os, holder);
}

void HolderProcess::dump(StreamBuffer& buffer, DataOption holder) …
Run Code Online (Sandbox Code Playgroud)

c++ scientific-notation

12
推荐指数
2
解决办法
600
查看次数

如何使用RestTemplate为每个请求设置RequestConfiguration?

我有一个正在使用的客户库和传入DataRequest对象拥有userid,timeout并且在它的一些其他领域.现在我使用这个DataRequest对象创建一个URL,然后我使用了一个HTTP调用RestTemplate,我的服务返回一个JSON响应,我用它来创建一个DataResponse对象并将这个DataResponse对象返回给它们.

以下是DataClient客户通过将DataRequest对象传递给我的类.DataRequest如果在getSyncData方法中花费太多时间,我正在使用客户传递的超时值来超时请求.

public class DataClient implements Client {

    private final RestTemplate restTemplate = new RestTemplate();
    private final ExecutorService service = Executors.newFixedThreadPool(10);

    // this constructor will be called only once through my factory
    // so initializing here
    public DataClient() {
        try {
          restTemplate.setRequestFactory(clientHttpRequestFactory());
        } catch (Exception ex) {
          // log exception
        }
    }           

    @Override
    public DataResponse getSyncData(DataRequest key) { …
Run Code Online (Sandbox Code Playgroud)

java spring multithreading resttemplate apache-httpclient-4.x

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

如何确保该方法只执行一次并且仅从一个线程执行?

我有一个下面的方法,我想在以下条件下执行:

  • 此方法只应执行一次.一旦它被执行,它就不能再次执行,所以如果有人再次尝试执行,它应该通过记录一些有用的错误消息already executed或任何有用的东西返回.
  • 它应该只由一个线程执行.因此,如果多个线程正在调用下面的方法,那么它应该只由一个线程调用,其他线程应该等待初始化完成?

以下是我的方法:

  public void initialize() {
    List<Metadata> metadata = getMetadata(true);
    List<Process> process = getProcess();
    if (!metadata.isEmpty() && !process.isEmpty()) {
        Manager.setAllMetadata(metadata, process);
    }
    startBackgroundThread();
  }
Run Code Online (Sandbox Code Playgroud)

这可能吗?我正在使用Java 7.

java concurrency multithreading

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

石英调度程序中每30秒cron表达式?

我正在使用Quartz Scheduler来运行我的工作.我想每三十秒钟完成一次工作.我的cron表达方式是什么?

每一分钟,我使用下面的cron表达式:

<cron-expression>0 0/1 * 1/1 * ? *</cron-expression>
Run Code Online (Sandbox Code Playgroud)

每30秒会是什么?

java quartz-scheduler cronexpression

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

从列表中获取/删除第一个元素的有效方法?

我想取出并从列表中删除第一个元素.我可以看到,我有两个选择:

第一种方法:

LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
Run Code Online (Sandbox Code Playgroud)

第二种方法

ArrayList<String> servers = new ArrayList<String>();
....
String firstServerName = servers.remove(0);
Run Code Online (Sandbox Code Playgroud)

我的列表中有很多元素.

  • 我们应该使用哪种偏好?
  • 以上两者有什么区别?它们在性能方面在技术上是一样的吗?如果我们有很多元素,这里涉及的复杂性是多少?

什么是最有效的方法.

java collections linked-list list arraylist

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

错误:编译C++程序时未在此作用域中声明uint64_t

我正在尝试一个简单的程序来打印时间戳值,steady_clock如下所示:

#include <iostream>
#include <chrono>
using namespace std;
int main ()
{
  cout << "Hello World! ";
  uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
  cout<<"Value: " << now << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但每当我这样编译时g++ -o abc abc.cpp,我总是会收到一个错误:

In file included from /usr/include/c++/4.6/chrono:35:0,
                 from abc.cpp:2:
/usr/include/c++/4.6/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
abc.cpp: In …
Run Code Online (Sandbox Code Playgroud)

c++ g++ c++11 c++-chrono

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

以多种方式发送数据,具体取决于您希望如何发送数据

我有一堆键和值,我想通过将它们打包到一个字节数组中发送到我们的消息队列.我将创建所有键和值的一个字节数组,该数组应始终小于50K,然后发送到我们的消息队列.

包类:

public final class Packet implements Closeable {
  private static final int MAX_SIZE = 50000;
  private static final int HEADER_SIZE = 36;

  private final byte dataCenter;
  private final byte recordVersion;
  private final long address;
  private final long addressFrom;
  private final long addressOrigin;
  private final byte recordsPartition;
  private final byte replicated;
  private final ByteBuffer itemBuffer = ByteBuffer.allocate(MAX_SIZE);
  private int pendingItems = 0;

  public Packet(final RecordPartition recordPartition) {
    this.recordsPartition = (byte) recordPartition.getPartition();
    this.dataCenter = Utils.LOCATION.get().datacenter();
    this.recordVersion = 1;
    this.replicated = …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns bytebuffer single-responsibility-principle

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

chrono steady_clock没有给出正确的结果?

我的app服务器代码中有一行代码,它使用steady_clock如下所示的时间戳值:

uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
Run Code Online (Sandbox Code Playgroud)

现在我们有两个正在运行的Ubuntu 12 (gcc 4.6.3 compiler)systemA 机器和正在运行的machineB Ubuntu 14 (gcc 4.8.2 compiler).

现在我们使用另一个 make编译我们的app服务器代码Ubuntu 12 VM (which has 4.7.3 compiler),然后将生成的tar文件复制到machineA并启动我们的app服务器.在开始之后,上面的代码行在machineA中打印出如下值:

1439944652967
Run Code Online (Sandbox Code Playgroud)

现在我们还使用另一个 make编译相同的应用服务器代码Ubuntu 14 VM (which has 4.8.2 compiler),然后将生成的tar文件复制到machineB并启动我们的app服务器.在开始之后,上面的代码行在machineB中打印出这样的值:

10011360 
Run Code Online (Sandbox Code Playgroud)

你看到差异吧?我很困惑为什么这是差异,我无法理解这一点?所有代码和一切都是一样的.有没有人对此有任何解释,我该如何解决?

如果需要,我可以尝试添加一些调试代码,看看弄清楚这个问题有什么不对.

c++ ubuntu gcc c++-chrono

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