小编jb.*_*jb.的帖子

在Java中打开流的正确方法是什么

我将为物理专业的学生做一个关于Java的讲座,我想知道如何正确打开文件。

在我的许多专业应用程序中,我做了类似的事情:

  BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file")));
  try{
    ....
  }finally {
     bufferedWriter.close();
  }
Run Code Online (Sandbox Code Playgroud)

恕我直言,没关系,即阅读器将始终关闭。

当我将其作为我的学生的示例时,我想知道如果构造函数InputStreamReader抛出异常会发生什么 --- FileInputStream 将打开,但它不会被我的代码关闭(因为这些对象是在 try-finally 之外创建的)堵塞。

那么这是正确的习语吗?如果是的话那为什么呢?如果打开流不是正确的习惯用法,请给我指出正确的习惯用法!

编辑:我正在寻找既正确又易于编写和理解的习语,物理学生是编程的初学者。

编辑:愚蠢的我,我复制了错误的示例 --- 如果我使用作家而不是读者,它会变得更加复杂。

java java-io

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

Django模型继承:删除子类保持超类

在django中处理whith模型继承时,是否可以删除模型子类的实例,而无需删除超类本身?

使用Django示例,您可以只删除Resturaunt对象并保留Place对象吗?

python django django-models django-orm

4
推荐指数
2
解决办法
2377
查看次数

在python中从float中减去boolean

调试运行我的代码不管怎么说,当我发现基本上减去声明booleanfloat.

然后我尝试在python控制台中关注:

>>> 15.0 - True 
14.0
>>> 15.0 - False
15.0
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释:

python

4
推荐指数
2
解决办法
1576
查看次数

如何在selenium webdriver中以不区分大小写的方式查找包含特定单词的链接

我希望能够找到包含以下内容的链接:hello,Hello,hEllo,heLlo等.到目前为止,我使用的find_elements_by_partial_link_text是casse敏感:

links = driver.find_elements_by_partial_link_text('hello')
Run Code Online (Sandbox Code Playgroud)

python selenium selenium-webdriver

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

快速(以开发人员的方式)使用Java的大量C++代码的方式

背景:我们正在设计一个物理应用程序,它将进行大量的数据分析,但我们的重点是整合物理电子设备.

基本上我希望能够用Java编写的C++库编写的root(它是用C++编写的CERN的大数据分析库).基本上从Java中使用ROOT类的能力(并且不会浪费太多时间来编写JNI包装器)对我们来说是一个显而易见的事情(如果它很难,我们很可能会使用Qt).

我可以想到以下方法

  • JNI - 正如我所说 - 我们不想为每个班级写包装...
  • JNA - JNA不提供C++映射,但只提供C.
  • SWIG - 我没有使用它,但听说它很难使用.

其他可能很重要的事情:我们可以访问根源代码,但我们不想改变它.我们希望结果是可移植的.我们想坚持免费图书馆.正如我所说 - 我们可以从一开始就使用大量的ROOT代码,而不用大惊小怪.

c++ java interop root-framework

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

如果方法只需要ajax调用,那么返回什么错误?

如果期望仅通过AJAX使用,但是在没有正确的ajax头的情况下调用,则应该返回什么HTTP状态?我觉得我应该表示一些错误,但我找不到合适的错误.

我想最好是405方法不允许,但是如果例如ajax GET请求返回内容并且普通GET将返回405则会很奇怪.

ajax http http-status-codes

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

如何习惯地将``char*``转换为``double*``

我正在重新学习C++,而我正在努力学习boost::iostreams::mapped_file.这个类将文件数据映射到char*,我想把它投射到double*(因为我正在使用双打).

我可以使用C风格的double* foo = (double*) data强制转换:但是我正在尝试使用惯用的C++,而C++更喜欢C++强制转换,如:static_cast等等.

我提出了:

double* data = static_cast<double*>((void*)file.data());
Run Code Online (Sandbox Code Playgroud)

(file-> data returns char*).哪个真的不干净.

这是我正在尝试做的(此代码有效!):

BOOST_AUTO_TEST_CASE(OpenMMapArray){

typedef boost::multi_array_ref<double, 3> arrayd3;
typedef std::array<size_t, 3> index3d;

index3d shape = {{ 20, 20, 20 }};

size_t size = sizeof(double)*std::accumulate(shape.begin(), shape.end(), 1, std::multiplies<size_t>());

boost::iostreams::mapped_file file;

boost::iostreams::mapped_file_params params;

params.path = "/tmp/mmaptest-2";
params.mode = std::ios::in | std::ios::out;
params.new_file_size =  size;

file.open(params);

double* data = static_cast<double*>((void*)file.data());

arrayd3 array(data, shape);

array[0][0][0] = 20;
array[0][1][0] = 19; …
Run Code Online (Sandbox Code Playgroud)

c++ boost casting static-cast

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

如何应对sysadmin在`/ usr/lib`中安装的旧库

我最近在超级计算机网格上有一个帐户,我正在尝试在theri系统中编译我的代码.问题是程序不会链接以下错误:

/mnt/opt/tools/slc6/binutils/2.22/bin/ld: warning: libboost_system.so.1.55.0, needed by /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_thread.so, may conflict with libboost_system.so.5
/mnt/opt/tools/slc6/binutils/2.22/bin/ld: /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_thread.so: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/mnt/opt/tools/slc6/binutils/2.22/bin/ld: note: '_ZN5boost6system15system_categoryEv' is defined in DSO /mnt/home/jbzdak/tools/boost_1_55//lib/libboost_system.so.1.55.0 so try adding it to the linker command line
/mnt/home/jbzdak/tools/boost_1_55//lib/libboost_system.so.1.55.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是因为我的程序需要提升1.55,系统中只有1.39 /usr/lib64.我已经在本地文件夹中安装了我的boost版本,但不知何故仍然首先加载系统1.

以下是传递给编译器的标志的摘录:

  -std=gnu++11 -Werror -Wall -lboost_thread -lboost_filesystem -lboost_system -lboost_iostreams -g -DG4OPTIMISE -Iinclude 
  -W -Wall -ansi -pedantic -Wno-non-virtual-dtor -Wno-long-long -Wwrite-strings -Wpointer-arith -Woverloaded-virtual -pipe -O2
Run Code Online (Sandbox Code Playgroud)

标志的完整列表在这里(它们应该是无效的).

以下是令人满意的配置变量:

 LIBRARY_PATH …
Run Code Online (Sandbox Code Playgroud)

c c++ ld

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

Numpy/pandas元素在运算符中

我有一个列(或者更确切地说是pandas帧)有一个列A,这列中的值是整数(假设它们属于范围1..10).

现在我必须在这个数组中选择具有A值的行{3, 6, 9}(在这个例子中,它可以只是或==操作,但在现实生活中这个集合要长得多.

在库(pandasnumpy)中是否有任何函数允许我快速执行以下操作:

arr = pandas.DataFrame(...)
values = [3, 6, 9] 
valid_indexes = magic_function(arr.A, values)
Run Code Online (Sandbox Code Playgroud)

或者在numpy中:

arr = np.ndarray(...)
values = [3, 6, 9] 
valid_indexes = magic_function(arr[13, :], values)
Run Code Online (Sandbox Code Playgroud)

换句话说,我正在寻找元素in运算符.

python numpy pandas

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

创建一个大的std :: array导致段错误?

我想创建一个大的std::array并用随机数据填充它.问题是如果我声明std :: array program segfaults(GDB说它是segfaults auto start..),如果我评论数组声明程序运行.

这是SCSE:

#include <array>
#include <cstdint>
#include <iostream>
#include <chrono>

static const constexpr size_t size = 1E7;

int main(){

    auto start = std::chrono::high_resolution_clock::now();
    std::array<uint16_t, size> random_data;
    // Here I want to fill random_data with random numbers to avoid 
    // filling memory twice
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = end-start;
    std::cout << "Elapsed sec " << elapsed.count() << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

它是-std=gnu++11在GNU/Linux上使用gcc编译的.

c++ linux gcc c++11

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