【问题标题】:Java store and read byte array from property file yamlJava 从属性文件 yaml 存储和读取字节数组
【发布时间】:2019-05-19 19:17:36
【问题描述】:

我正在开发一个从数据库读取数据的应用程序。数据库中已经存在加密条目。我有一个字节数组的键,想从 yaml 文件中加载它。

有没有办法像这样填充数组

private static final byte[] iv = { 13, -11, -88, 20, -110, 113, -2, -8, -15, -99, -23, -10, -10, -74, 1, 11 }

直接来自 yaml 文件?

yaml 文件:

iv: 13,-11,-88

由于我无法自动装配需要使用密钥的类,因此我无法使用@value 注释(据我了解)。所以我希望使用这样的 util 类:

public static byte[] getKeyFor(Class type) {
    return context.getEnvironment().getProperty("iv");
}

【问题讨论】:

  • 请以您的简单 yaml 文件为例
  • @BSeitkazin 我会将其编辑到问题中,但我的问题是,应用程序上下文(spring)上的 getProperty() 方法只返回字符串
  • 是的,这是正确的行为。您应该自己将该字符串解析为数组或字节列表
  • @BSeitkazin 有什么工具可以用来直接将字符串转换为字节数组吗?
  • 添加为答案

标签: java arrays spring yaml


【解决方案1】:

以下应该可以:

application.yml:

iv: 12,32,12,32

在你想要值的类中,像下面这样绑定它:

@Value("${iv}") byte[] iv;

【讨论】:

  • 我一直在寻找类似的东西,还有一个问题。我不能自动装配相应的类,所以我不能使用@value 注释。我正在寻找使用我现在在我的问题中编辑的 util 类。
  • 有什么原因不能自动连接课程吗?在这种情况下,将 this 自动装配到 Spring 在您的应用程序中创建的 bean 中,从应用程序上下文中获取该 bean,然后从该 bean 中获取此字节数组。
【解决方案2】:

你得到了一些带有String格式的字节数据的字符串。

String iv = someCall(); //"13, -11, -88, 20, -110, 113, -2, -8, -15, -99, -23"
String[] byteStrings = iv.split(",");
byte[] byteData = new byte[byteStrings.length];
for (int i = 0; i < byteData.length; i++){
    byteData[i] = Byte.parseByte(byteStrings[i], 8); 
}

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2017-07-16
    相关资源
    最近更新 更多