标签: java

如何在Shell中获取字符串的二进制表示?

我正在使用openssl dgst -sha1 -binary以二进制格式获取字符串的哈希值。

(我使用-binary标志是因为我的 openssl 版本在默认输出的每个散列值之前添加了“stdout”,并-binary有助于避免它,因此更容易以二进制格式存储散列结果以供进一步处理(因此我可以xxd -p在我想要十六进制值,而不是stdout从每个字符串中手动删除“ ”)

因此,openssl dgst -sha1 -binary“Hello!”的二进制输出 Cygwin 控制台中的字符串将如下所示:_??"q?%?a????.&C?0N?Q??vH&8i

现在我用这个结果创建一个新变量并将它与另一个变量连接起来,该变量的值不是二进制格式(即“世界”)。所以我的新变量现在看起来像

_??"q?%?a??.&C?0N?Q??vH&8iWorld

然后我为这个连接的字符串生成另一个哈希,并将它与我使用默认 Java 哈希库 ( MessageDigest)得到的哈希进行比较。然而,在这一步中,通过 shell 和 Java 获得的哈希值不匹配(我需要获得与 Java 端生成的值完全相同的值)。

所以我想我的“世界”字符串也应该是二进制格式以匹配我的 Java 哈希输出(因为只要我为连接的二进制值生成哈希,所有哈希都匹配)。但是,我不知道如何在 shell 中将我的“世界”字符串转换为二进制格式。有任何想法吗?

shell java shell-script openssl binary

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

素性测试二进制

我正在使用 Java 程序 (BigIntegers) 生成数字,我想知道是否有一个现成的二进制文件可以用来对生成的数字运行素性测试......假设我通过来自我的 Java 程序的管道馈送它们进入二进制。它在那里吗?我正在尝试在 apt 上找到 aks 的软件包,但我看不到任何“直接”的东西,只有我可以用来编程东西的库(例如,基于 GMP)。

java math

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

如何获取 pid 号和它所在的文件夹

我如何获得 PID 号和它工作的文件夹?

如果我在不同的文件夹中运行 2 个相同的程序:

/var/www/public_html/first_folder/test.jar <i>(it runs all the time)</i>
/var/www/public_html/second_folder/test.jar <i>(it runs all the time)</i>
Run Code Online (Sandbox Code Playgroud)

如果我运行这个命令 ps aux | grep test.jar

结果:

www-data  3766  0.5  3.8 2959916 75616 ?       Sl   15:01   0:13 java -jar test.jar

www-data  4239  3.4  4.1 2959916 82432 ?       Sl   15:31   0:18 java -jar test.jar
Run Code Online (Sandbox Code Playgroud)

我不知道是哪个 PID ----第一个文件夹还是第二个。

process java pwd

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

为什么双击 .desktop 文件时环境变量没有解析?

我有一个由 shell 脚本启动的 Java 应用程序。shell 脚本的第一部分是通过查看$JAVA_HOME.

如果从终端启动,shell 脚本运行良好,但如果通过双击.desktop包含以下内容的文件启动,则会失败

Exec=/bin/sh "/opt/HO/HO" %U
Run Code Online (Sandbox Code Playgroud)

查看日志似乎发生了错误,因为$JAVA_HOME以这种方式启动脚本时不返回任何内容。

我试图替换/bin/sh/bin/bash但它也失败了。

知道为什么找不到这样的环境变量吗?我该怎么办?

ubuntu java shell-script environment-variables .desktop

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

是否可以使用sdkman从本地安装jdk

现在我使用sdkman从互联网安装jdk失败,由于网络访问问题,我无法安装jdk。现在我想使用 sdkman 从本地安装 sdk。我认为程序会是这样的:

  1. 从互联网下载 jdk tar.gz 文件
  2. 将文件复制到某个文件夹
  3. 使用sdkman从本地路径安装jdk

是否可以?我已经下载了jdk,如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz
Run Code Online (Sandbox Code Playgroud)

java

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

Arch linux - 更新软件包时出错:jdk-openjdk 和 jre-openjdk 存在冲突

当我尝试更新系统时出现jdk-openjdk and jre-openjdk are in conflict 错误:

这是更新尝试的日志:

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib is up to date
:: Searching AUR for updates...
:: Searching databases for updates...
 -> Packages not in AUR: bunjs-bin  flite1-patched  jellyfin-server-bin  jellyfin-web-bin  js78  libgweather  libopenaptx  libvterm01  nodejs-lts-gallium  progsreiserfs  python-backcall
 -> Orphan (unmaintained) AUR Packages: anki-official-binary-bundle  jdk-jetbrains  jetbrains-clion-pj  python-gymnasium-notices  python-hijri-converter  python-jax-jumpy  python-pep517
 -> Flagged Out Of Date AUR Packages: anki-official-binary-bundle  blades-bin …
Run Code Online (Sandbox Code Playgroud)

arch-linux java pacman package-management

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

调试 Java 程序以在 Ubuntu 上更改时区配置文件

这是我编写的 ruby​​ 脚本,用于更改 Ubuntu 上的时区配置。我用jruby(在 JVM 中运行的 Ruby 解释器)运行它。

require 'java'

if ARGV.length == 0
  puts "Usage: jruby change_timezone.rb America/Toronto"
  exit
end

old_zone = File.read("../../../etc/timezone")
puts old_zone
time1 = Time.now
puts "Current Time:"+time1.localtime.to_s

new_zone = ARGV[0]
open('../../../etc/timezone','w') do |f|
  f.puts new_zone.to_s
  f.close
end

new_zone = File.read("../../../etc/timezone")
puts new_zone
time2 = Time.now
puts "Updated Time:"+time2.localtime.to_s
Run Code Online (Sandbox Code Playgroud)

它确实正确更改了配置文件。但是,脚本的输出与预期不同。

假设时区的默认值为America/Toronto。当我运行命令时jruby change_timezone.rb Asia/Chongqing,输出是:

America/Toronto
Current Time:Thu Jul 07 14:43:23 -0400 2011
Asia/Chongqing
Updated Time:Thu Jul 07 14:43:23 -0400 2011 …
Run Code Online (Sandbox Code Playgroud)

ubuntu java timezone

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

在 Debian 上编译 (?) java 包

我注意到在 Debian 上寻找 jinput 库(我相信这里的“j”意味着这是一个 Java 特定的库,而不是一个简单的包装器),有两个包可能适用:

libjinput-java/stable 20100502+dfsg-7 all
  Java Game Controller API

libjinput-jni/stable 20100502+dfsg-7 armhf
  Java Game Controller API (jni)
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个 ARM 系统。我知道其他语言有时有两种实现方式,一种需要编译的更快的实现,另一种不需要编译的“纯任何”(在本例中为 java)。后者在这里似乎不太可能,但我不确定;第一个作为适用于“所有”平台的包出现这一事实与第二个相比很有趣,后者是特定于体系结构的列表。

那么,在 Debian 命名法中,-java包和-jni包之间有什么区别?


我现在猜测这个-jni包允许这个库“反向”使用,即从 C/C++ 中使用,如果有人可以确认或否认......

debian java apt

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

Debian 8 -bash: /usr/bin/java: 没有那个文件或目录

在一个新的 Debian 系统上我安装了 JRE 使用

sudo apt-get install default-jre
Run Code Online (Sandbox Code Playgroud)

然后我下载了一个 jar 文件并尝试运行它:

java -jar server.jar
Run Code Online (Sandbox Code Playgroud)

该文件抛出异常:

java.lang.unsupportedclassversionerror unsupported major.minor version 52.0

所以我开始寻找解决方案并按照用户的说明进行操作:

sudo rm /usr/bin/java
sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin
Run Code Online (Sandbox Code Playgroud)

后来我意识到我什至没有目录/Library,因此这个链接没有指向任何地方。

现在我什至不能再运行java了:

java -jar server.jar
-bash: /usr/bin/java: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我已经尝试卸载 JRE 并重新安装它:

apt-get remove default-jre
apt-get update
apt-get install default-jre
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何东西。

Java似乎已安装:

    find /usr -name java
/usr/share/bash-completion/completions/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/bin/java
Run Code Online (Sandbox Code Playgroud)

debian java

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

即使我们安装了 java JDK,也找不到 jstat

我们在 Red Hat Enterprise Linux 7.5 上安装了以下 RPM(Java 开发工具包的一部分):

$ rpm -qa | grep jdk
java-1.8.0-openjdk-headless-1.8.0.171-8.b10.el7_5.x86_64
java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
Run Code Online (Sandbox Code Playgroud)

但我们找不到jstat哪个应该在以下路径上:

 /usr/jdk64/jdk1.8.0...../bin/jstat
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

jstat上面安装的 RPM 的一部分还是我们需要另一个 java 安装?

$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)

yum rhel java jdk

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