java - maven打包导致二进制文件大小被改变
伊谢尔伦
伊谢尔伦 2017-04-18 10:47:12
0
1
999

使用class.getClassLoader().getResourceAsStream()这种方法获取classpath下的文件流,读取出来的文件比写main方法读出来的文件大小更大。

问题已经解决。

本地main方法测试

使用tomcat做为容器运行同样代码时

相关代码:

 synchronized (PhoneNumberGeo.class) {
        if (dataByteArray == null) {
          ByteArrayOutputStream byteData = new ByteArrayOutputStream();
          byte[] buffer = new byte[1024];

          int readBytesLength;
          try {
            InputStream inputStream = PhoneNumberGeo.class.getClassLoader()
                    .getResourceAsStream("phone.dat");
              while ((readBytesLength = inputStream.read(buffer)) != -1) {
              byteData.write(buffer, 0, readBytesLength);
            }
            inputStream.close();
          } catch (Exception e) {
            System.err.println("Can't find phone.dat in classpath phone.dat");
            e.printStackTrace();
            throw new RuntimeException(e);
          }

          dataByteArray = byteData.toByteArray();
        }
      }
    }

    byteBuffer = ByteBuffer.wrap(dataByteArray);
    byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    int dataVersion = byteBuffer.getInt();
    indexAreaOffset = byteBuffer.getInt();

完整代码:
开源代码github

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(1)
黄舟

Le problème a été résolu~ !
Résumé : cela est dû au placement d'un fichier binaire sur le chemin de classe et à l'utilisation du plug-in maven-resources-plugin pour copier le fichier de ressources.

Dans le détail, il devrait y avoir une option pour le plugin maven-resources-plugin

  <filtering>true</filtering>

S'il est activé, tous les fichiers à copier dans le chemin de classe seront remplacés par défaut, ce qui signifie qu'ils seront mappés aux propriétés
et pourront ensuite être utilisés dans la configuration XML, comme le jdbc. propriétés. Mais cette opération ne convient pas aux fichiers binaires, tels que png, gif, pdf, etc.
Nous devons exclure ces formats de fichiers.

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>dat</nonFilteredFileExtension>
                        <nonFilteredFileExtension>swf</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>

Processus de réflexion :
J'ai fait beaucoup de détours au début, je pensais que c'était à cause du problème avec le package jar référencé dans le projet, mais après une longue recherche, je n'ai toujours pas trouvé. la raison. Enfin, j'ai découvert le md5 de chaque fichier et constaté que les fichiers du répertoire cible n'étaient pas cohérents avec ceux du répertoire des ressources, et j'ai finalement trouvé le problème.

Référence :
Filtrage binaire Maven
Autres méthodes pour obtenir des fichiers sous classpath

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal