我正在尝试创建一个大小类型的字节数组long.例如,将其视为:
long x = _________;
byte[] b = new byte[x];
Run Code Online (Sandbox Code Playgroud)
显然,您只能指定int一个字节数组的大小.
在有人问为什么我需要一个如此大的字节数组之前,我会说我需要封装我没有编写的消息格式的数据,其中一种消息类型的长度为unsigned int(long在Java中).
有没有办法创建这个字节数组?
我在想如果没有办法解决它,我可以创建一个字节数组输出流并继续输入它的字节,但我不知道是否对字节数组的大小有任何限制......
这段代码:
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Run Code Online (Sandbox Code Playgroud)
你能解释一下它的意思吗:
foo.x = foo = {n: 2};
Run Code Online (Sandbox Code Playgroud)
我看到{n:2}分配给了foo.为什么undefined分配给foo.x?是否foo = {n: 2};恢复undefined?
为什么我在谈论子类化/继承时有时会在C++示例中看到,基类有虚拟关键字,有时被覆盖的函数也有虚拟关键字,为什么有时需要向子类添加虚拟关键字?例如:
class Base
{
Base(){};
virtual void f()
......
}
};
class Sub : public Base
{
Sub(){};
virtual void f()
...new impl of f() ...
}
};
Run Code Online (Sandbox Code Playgroud) 我开发了一个Java套接字服务器连接,工作正常.
从终端启动时,它从客户端侦听开始.但当我关闭终端时,它停止收听.
我需要继续,即使终端由用户从jar文件启动的地方关闭.
如何在Linux中运行Java服务器套接字应用程序作为后台进程?
在Python中,我想获取当前的Unix时间戳,然后长期存储该值并由非Python系统处理。(我不仅仅是试图计算同一程序运行中两个时间戳之间的差异。)
调用该函数time.time()似乎是获取所需时间戳的一种非常合理且简洁的方法......直到我阅读文档:
以浮点数形式返回自纪元以来的时间(以秒为单位) 。纪元的具体日期和闰秒的处理取决于平台。在 Windows 和大多数 Unix 系统上,纪元是 1970 年 1 月 1 日 00:00:00 (UTC),闰秒不计入自该纪元以来的时间(以秒为单位)。这通常称为 Unix 时间。要了解给定平台上的纪元,请查看。
gmtime(0)[...]
“纪元……取决于平台”这句话是一个警告信号。狡猾的说法是“大多数Unix 系统”。time.time()Python的纪元不是1970-01-01T00:00:00Z的 Unix 或非 Unix 系统的示例有哪些?
time.time()对我的目标来说是不是有点不安全?我应该寻找替代品datetime.datetime.now().timestamp()吗?
深入挖掘后,我还注意到以前版本的 Python 似乎没有以下警告time.time():
以浮点数形式返回自纪元以来的时间(以秒为单位)。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。
甚至更旧的措辞:
以浮点数形式返回时间,以 UTC 格式自纪元以来的秒数表示。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。
我只是尝试用各种方法实现代码(在Java中),通过它可以计算斐波那契数列的第n项,并且我希望验证我学到了什么.
迭代实现如下:
public int iterativeFibonacci(int n)
{
if ( n == 1 ) return 0;
else if ( n == 2 ) return 1;
int i = 0, j = 1, sum = 0;
for ( ; (n-2) != 0; --n )
{
sum = i + j;
i = j;
j = sum;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
递归实现如下: -
public int recursiveFibonacci(int n)
{
if ( n == 1 ) return 0;
else if ( n == 2 ) …Run Code Online (Sandbox Code Playgroud) 如果我要在循环内声明一个变量,那么在循环之外使用声明会更快吗?程序是否n在每次迭代时重新分配内存或在整个过程中使用相同的内存位置?
for(int i=0;i<10;i++)
{
int n = getNumber();
printf("%d\n",n);
}
Run Code Online (Sandbox Code Playgroud)
与
int n;
for(int i=0;i<10;i++)
{
n = getNumber();
printf("%d\n",n);
}
Run Code Online (Sandbox Code Playgroud) 我有一个大文件,预计大约12 GB.我想将它全部加载到具有16 GB RAM的强大64位机器的内存中,但我认为Java不支持大字节数组:
File f = new File(file);
long size = f.length();
byte data[] = new byte[size]; // <- does not compile, not even on 64bit JVM
Run Code Online (Sandbox Code Playgroud)
是否可以使用Java?
Eclipse编译器的编译错误是:
Type mismatch: cannot convert from long to int
Run Code Online (Sandbox Code Playgroud)
javac给出:
possible loss of precision
found : long
required: int
byte data[] = new byte[size];
Run Code Online (Sandbox Code Playgroud) 使用像SHA-256这样的安全散列函数是微不足道的,并且继续使用MD5来实现安全性是鲁莽的行为.但是,我希望更好地理解哈希函数漏洞的一些复杂性.
已经为MD4和MD5生成了碰撞.根据NIST,MD5不是安全散列函数.生成冲突只需要2 39次操作,绝不能用于密码.然而,SHA-1很容易受到类似的碰撞攻击,其中可以在2 69次操作中发现碰撞,而蛮力是2 80.没有人生成SHA-1冲突,NIST仍然将SHA-1列为安全消息摘要功能.
那么什么时候使用破坏的哈希函数是安全的呢?即使功能被破坏,它仍然可以"足够大".根据Schneier的说法,易受冲突攻击的哈希函数仍然可以用作HMAC.我相信这是因为HMAC的安全性取决于其密钥,并且在获得此密钥之前无法找到冲突.一旦你在HMAC中使用了密钥,它就已经坏了,所以这是一个没有实际意义的问题.哈希函数漏洞会破坏HMAC的安全性?
让我们进一步了解这个属性.如果密码前面加盐,那么使用像MD4这样的非常弱的消息摘要是否可以安全地使用密码?请记住,MD4和MD5攻击是攻击前缀,如果预先添加了盐,则攻击者无法控制消息的前缀.如果盐真的是一个秘密,并且攻击者不知道,那么它是否附加在密码上是否重要?假设攻击者在获得整个消息之前无法生成冲突,这是否安全?
您是否知道在不引入漏洞的情况下可以在安全上下文中使用损坏的哈希函数的其他情况?
(请发布支持证据,因为它很棒!)
java ×5
arrays ×2
64-bit ×1
algorithm ×1
big-o ×1
byte ×1
c ×1
c++ ×1
cryptography ×1
for-loop ×1
hash ×1
inheritance ×1
javascript ×1
linux ×1
long-integer ×1
process ×1
python ×1
python-3.x ×1
security ×1
sockets ×1
string ×1
timestamp ×1