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

Java getResourceAsStream()返回不正确的字节,java,maven,resources,stream,classpath,Java,Maven,Resources,Stream,Classpath,我刚刚在getResourceAsStream()中遇到了一个非常奇怪的问题 在我的prod项目JUnit测试中,我使用getResourceAsStream()读取测试数据,我发现getResourceAsStream()有时会替换一些字节: byte[] fileBytes = FileUtils.readFileToByteArray(new File( "resources/test/parser/test-short-enc.xml")); printBytes(fileBy

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

在我的prod项目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);
在此项目中,输出如下所示:

public static void printBytes(byte[] bv) {
    System.out.println();
    for (byte b : bv) {
        System.out.print(' ');
        System.out.print(String.format("%02X", b));
    }
}
D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8D1 81D1 82 D0 B8 D0 BA D0 B0

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

在这之后,我决定创建一个显示项目的小bug,并将其作为一个示例托管在Github上。以下是链接:

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

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

D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8D1 81D1 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工作区编码,该文件包含西里尔语单词“КПааааааааааааааа

我对这两个项目都使用JavaSE-1.6(jdk1.6.029), 我有Windows7操作系统,Windows1252系统编码

更新

我终于能够重现这个错误。我更新了项目,以便您可以测试它:

只有在maven pom.xml中有此代码时,才会出现此错误。这意味着它是特定于maven的

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

src
资源
真的
...

好的,我知道答案了

此配置修复了以下问题:

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

UTF-8
...

我得到了这个答案的启发:

或者更可能的原因是。。。这两个文件不一样。清理项目可能会help@BrianRoach1)文件是一样的,是我抄的,不是手工打的。2) 问题是类路径资源读取返回一个不正确的字节,而直接访问的同一个文件返回一个正确的字节序列。@我清理了项目,重新启动了eclipse,结果相同。您确定这两个引用都指向本地系统中相同的
test-short-enc.xml
文件吗?