当前位置: 首页 > 面试题库 >

Java class.getResourceAsStream()返回不正确的字节

澹台景山
2023-03-14
问题内容

我刚遇到getResourceAsStream()一个非常奇怪的问题。

在我的产品项目JUnit测试中,我使用getResourceAsStream()读取测试数据,我发现getResourceAsStream()有时会替换一些字节:

byte[] fileBytes = FileUtils.readFileToByteArray(new File(
    "resources/test/parser/test-short-enc.xml"));

printBytes(fileBytes);

byte[] classPathBytes = IOUtils.toByteArray(ParserTest.class
    .getResourceAsStream("/test/parser/test-short-enc.xml"))

printBytes(classPathBytes);

在此项目中的输出如下所示:

D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0
BA D0 B0

D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 3F D1 82 D0 B8 D0
BA D0 B0

之后,我决定创建一个小的错误显示项目,并作为示例将其托管在Github上。这是链接:https : //github.com/snowindy/getResourceAsStream-
Bug

我基本上复制了所需的代码,运行后,看不到问题重现:

D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0
BA D0 B0

D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0
BA D0 B0

printBytes函数如下所示:

public static void printBytes(byte[] bv) {
    System.out.println();
    for (byte b : bv) {
        System.out.print(' ');
        System.out.print(String.format("%02X", b));
    }
}

会是什么?

我使用Eclipse,UTF-8工作区编码,该文件包含西里尔字母“Криминалистика”,它是UTF-8 no-BOM文件。

对于这两个项目,我都使用JavaSE-1.6(jdk1.6.0_29),我使用Windows 7 OS,Windows-1252系统编码。

更新

我终于能够重现该错误。我更新了该项目,以便您可以对其进行测试:html" target="_blank">https : //github.com/snowindy/getResourceAsStream-
Bug

仅当您在maven pom.xml中包含此代码时,该错误才会出现。这意味着它是特定于Maven的

<build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
        <resource>
            <directory>resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
...

问题答案:

好的,我知道了。

此配置解决了该问题:

<project>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
...


 类似资料:
  • 问题内容: def size_of_dir(dirname): print(“Size of directory: “) print(os.path.getsize(dirname)) 是有问题的代码。dirname是一个目录,其中包含 130个 文件,每个文件约 1kb 。当我调用此函数时,它返回 4624 ,这 不是 目录的大小…为什么? 问题答案: 此值(4624B)代表的大小 文件 是 描

  • 我将这个字符串从客户端发送到服务器: 该字符串是由服务器打印出来的,所以它是正确的。 “AR”是数据包名称,值是弓箭手将要射出的箭的速度。 这里出什么问题了?

  • 在我的CentOS7工作站上,我有elasticsearch(ver.5.5.1)服务,按映像:docker.elastic.co/elasticsearch/elasticsearch:5.5.1。 我的工作站上的文件系统类型是XFS。 我有.tar存档文件/usr/share/elasticsearch/data/nodes/0/包含索引结构:(来自kibana的JSON) 开始记录我的JVM

  • 我正在使用postgis计算两个地理坐标之间的距离。 它返回给我53536.743496517米,大约等于54公里,但实际距离是103公里,我通过http://boulter.com/gps/distance/ 我在询问中是否做错了什么?

  • 我正在尝试在代码中使用NSPredicate搜索名称。搜索工作正常,但不会返回适当的结果。当我搜索一个名称(例如“Colin”)时,它会返回表中的所有其他名称或另一个名称(例如“Mike”),但如果我输入一个不存在的随机字符串,它会返回:“找不到结果”。当我在搜索栏中键入一个名字(例如Lisa)时,我希望它能找到这个名字(Lisa)并返回它,但它没有这样做 这是我的代码: 自己name返回表中的所

  • 问题内容: 我正在使用接受json响应的jquery ajax调用: 在我的php后端函数中,我在一个简单的数组上使用json_encode,如下所示: 但是 alert(msg.hello) 为我返回 未定义 。这是怎么了?另外,在我的 console.log中, 我能够得到如下输出: 问题答案: 使用的返回数据: