在阅读我的代码时,我注意到我的IDE列出了一条警告,其中包含以下消息:
在JDK 7下的try块中报告相同的catch部分.可以使用quickfix将部分折叠为multi-catch部分.
并且还指定为JDK 7+抛出此警告
try块如下:
try {
FileInputStream e = new FileInputStream("outings.ser");
ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
} catch (FileNotFoundException var3) {
var3.printStackTrace();
} catch (ClassNotFoundException var5) {
var5.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但是当删除时(抛出该特定警告的catch块):
catch (ClassNotFoundException var5) {
var5.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我仍会得到错误:
ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
Run Code Online (Sandbox Code Playgroud)
我错过了一些我到目前为止还没想到的明显的东西吗?
选择似乎介于std::fs::PathExt和之间std::fs::metadata,但后者建议暂时使用,因为它更稳定.以下是我一直在使用的代码,因为它基于文档:
use std::fs;
pub fn path_exists(path: &str) -> bool {
let metadata = try!(fs::metadata(path));
assert!(metadata.is_file());
}
Run Code Online (Sandbox Code Playgroud)
但是,由于一些奇怪的原因let metadata = try!(fs::metadata(path))仍然需要函数返回一个,Result<T,E>即使我只是想返回一个布尔值,如图所示assert!(metadata.is_file()).
尽管很快就会有很多变化,但我如何绕过这个try!()问题呢?
以下是相关的编译器错误:
error[E0308]: mismatched types
--> src/main.rs:4:20
|
4 | let metadata = try!(fs::metadata(path));
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected bool, found enum `std::result::Result`
|
= note: expected type `bool`
found type `std::result::Result<_, _>`
= note: this error originates in a macro outside of the current crate
error[E0308]: mismatched types
--> …Run Code Online (Sandbox Code Playgroud) 我最近查看了一些关于Swing#JTable的Oracle教程上发布的代码.IntelIJ返回了一些关于在保存Table数据的多维数组中装箱原始变量的警告消息.
这是找到的数组,取自docs.oracle.com:
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
Run Code Online (Sandbox Code Playgroud)
所有包装的变量都收到此消息:
"不必要的拳击'新整数(5)'报告"拳击",例如在对象中包裹原始值.在Java 5和更新版本下不需要拳击,并且可以安全地删除.此检查仅报告项目或模块是否配置为使用5.0或更高的语言水平."
我知道Java中装箱和拆箱的概念,我的问题是为什么它在新版本的Java中"无关紧要",因为我看到很多开发人员在讨论或最近使用它.
此外,由于不需要拳击,应该用'new Integer(5)'代替什么?
在检查了JavaDocs中我正在考虑使用的方法之后requiredNonNull,我偶然发现了第一个带有单个参数的方法(T obj).
但是这个签名的特定方法的实际目的是什么?所有这一切只是投掷和NPE,我有点积极(因为我可能会遗漏一些明显的东西)无论如何都会抛出.
抛出: NullPointerException - 如果obj为null
后者实际上在调试某些代码方面是有意义的,正如文档所述,它主要是为参数验证而设计的
public static <T> T requireNonNull(T obj,String message)
检查指定的对象引用是否为null,如果是,则抛出自定义的NullPointerException.
因此,我可以与NPE一起打印特定信息,使调试变得更加容易.
考虑到这一点,我非常怀疑我会遇到一种情况,我宁愿只使用前者.请赐教.
tl; dr - 为什么你会使用不接收消息的重载.
我已经使用SO用户建议的更新代码更新了问题,并将澄清之前存在的任何模糊文本.
我只能访问相关应用程序生成的日志文件.因此,我被限制在日志文件的内容中工作,并且没有超出该范围的解决方案.我会稍微修改一下样本数据.我想指出以下关键变量.
Thread ID - 范围从0..19 - 线程被多次使用.因此ScriptExecThread(2)可以在日志中多次出现.
Script - 每个线程都将在特定文件上运行脚本.同样的脚本可能会在同一个线程上运行,但不会在同一个线程AND文件上运行.
File- 每个人都Thread ID跑Script一个File.如果Thread(10)在运行myscript.script上myfile.file,然后,准确的线不会被再次执行.使用上述示例的成功示例将是这样的.
- - - 开始 - - -
线程(10)在myfile.file上启动myscript.script
线程(10)在myfile.file上完成了myscript.script
- - - 结束 - - - -
使用上面示例的不成功示例将是:
- - - 开始 - - -
线程(10)在myfile.file上启动myscript.script
- - - 结束 - - -
在解决我的查询之前,我将简要介绍所使用的代码和所需的行为.
我正在解析大型日志文件(平均需要100k到600k行),并且我试图按特定顺序检索某些信息.我已经根据我的要求制定了布尔代数,它似乎在纸上起作用但在代码上却没有那么多(我肯定错过了一些显而易见的东西).我想提前告知代码没有任何形状或形式优化,现在我只想让它工作.
在此日志文件中,您可以看到某些线程在它们启动时挂起但从未完成.可能的线程ID范围的数量.这是一些伪代码:
REGEX = "ScriptExecThread(\\([0-9]+\\)).*?(finished|starting)" //in java
Set started, finished …Run Code Online (Sandbox Code Playgroud) 我有一些示例代码,目前正在使用getopts,它被指定为依赖项Cargo.toml
[dependencies]
getopts = "0.2"
Run Code Online (Sandbox Code Playgroud)
但是-t,由于显而易见的原因,我似乎无法--test通过货物(例如cargo run --test)传递参数(,).
由于我已经指定了外部依赖项,因此尝试运行rustc src/main.rs --test也不会起作用:
src/main.rs:2:5: 2:21 error: unresolved import `getopts::Options`. There is no `Options` in `getopts`
src/main.rs:2 use getopts::Options;
^~~~~~~~~~~~~~~~
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)
是否有其他方法可以实现这一目标或暂时的替代方案?
我目前正在开发一个安全工具的Rust 端口。根据 Rust 的指南,我想将核心库隔离到自己的包中,以便我们可以创建与核心库交互的各种工具(CLI、API、流等),而无需将它们耦合在一起。
核心库公开了两个公共枚举,其中之一是PermutationMode(截断的):
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum PermutationMode {
All,
Addition,
BitSquatting,
Homoglyph,
}
Run Code Online (Sandbox Code Playgroud)
使用Clap创建 CLI 实用程序时,我想将此库 Enum 扩展为 CLI 的一部分,如下所示:
use clap::Clap;
use twistrs::permutate::PermutationMode;
#[derive(Clap, PartialEq, Debug)]
#[clap(name = "twistrs-cli")]
struct Opts {
#[clap(short, long)]
registered_domains: bool,
#[clap(arg_enum)]
permutation_mode: PermutationMode,
}
Run Code Online (Sandbox Code Playgroud)
这样,在调用 CLI 时,我们可以将排列模式从用户无缝传递到 CLI、库,并且 CLI 无需了解内部模式(如果库添加了更多模式)。
./twist-cli --registered-domains --permutation_mode=all example.com
Run Code Online (Sandbox Code Playgroud)
目前这似乎不可能(这是有道理的)。一种尝试是使用类型别名:
./twist-cli --registered-domains --permutation_mode=all example.com
Run Code Online (Sandbox Code Playgroud)
但是,我们不能将派生宏用于类型别名。我还尝试“克隆”枚举并尝试映射到库枚举:
#[derive(Clap)]
type ArgPermutationMode = PermutationMode
Run Code Online (Sandbox Code Playgroud)
哪个不编译。
问题- 是否可以扩展内部库 Enum 以将其用作 …
什么分别定义了两者?
会话固定描述为:
会话固定是一种允许攻击者劫持有效用户会话的攻击。该攻击探索了 Web 应用程序管理会话 ID 方式的限制,更具体地说是易受攻击的 Web 应用程序。`
资料来源:OWASP
这似乎与 CSRF 所利用的相当接近。两者的区别是什么Session fixation仅仅是来自CSRF的同义词或分支?
还想提一下,来自我提供的 OWASP 链接的关键术语与 CSRF 中提到的几乎相同
使用下面的代码,我能够得到正确的答案,但重复两次.
例如,我只想要一个结果[1.2038, 1.206],但下面的代码打印出来[1.2038, 1.206, 1.2038, 1.206].谁知道我的代码出了什么问题?任何帮助将不胜感激.谢谢!
spot = [1.2020, 1.2040]
forwardSwap = [0.0018, 0.0020]
forwardOutright = []
for i in range(len(spot)):
for i in range(len(forwardSwap)):
forwardOutright.append(spot[i] + forwardSwap[i])
print forwardOutright
Run Code Online (Sandbox Code Playgroud) 查看以下代码:
@Override
public int compareTo(final Intersection o) {
if (o == null)
return 0;
double distance = t;
double distance2 = o.t;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但是在两个不同的条件场合返回0的事实确实让我感到有些困扰.如果我不动不过的变量赋值distance和distance2顶端,我的IDE警告我说,
if (o == null)
return 0;
Run Code Online (Sandbox Code Playgroud)
那将是'死'代码.如果是这种情况,在这种情况下甚至应该检查null吗?
我的意思是:
@Override
public int compareTo(final Intersection o) {
double distance = t;
double distance2 = o.t;
if (o == null)
return 0;
if (distance == distance2)
return 0;
return distance2 > …Run Code Online (Sandbox Code Playgroud)