Rumah  >  Soal Jawab  >  teks badan

java - maven打包导致二进制文件大小被改变

使用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

伊谢尔伦伊谢尔伦2744 hari yang lalu928

membalas semua(1)saya akan balas

  • 黄舟

    黄舟2017-04-18 10:49:12

    Masalah telah selesai~!
    Ringkasan: Ia disebabkan oleh meletakkan fail binari pada laluan kelas dan menggunakan pemalam maven-resources-plugin untuk menyalin fail sumber.

    Secara terperinci, mesti ada pilihan untuk pemalam maven-resources-plugin

      <filtering>true</filtering>

    Jika ia dihidupkan, semua fail yang akan disalin dalam laluan kelas akan digantikan secara lalai, yang bermaksud bahawa ia akan dipetakan kepada sifat
    dan kemudian boleh digunakan dalam konfigurasi xml, seperti jdbc. harta benda. Tetapi operasi ini tidak sesuai untuk fail binari, seperti png, gif, pdf, dll.
    Kami perlu mengecualikan format fail ini.

    <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>

    Proses berfikir:
    Saya mengambil banyak lencongan pada mulanya, saya fikir ia adalah kerana masalah dengan pakej balang yang dirujuk dalam projek, tetapi setelah mencari lama, saya masih tidak menemui. sebabnya. Akhirnya, saya mendapati md5 bagi setiap fail dan mendapati bahawa fail dalam direktori sasaran tidak konsisten dengan fail dalam direktori sumber, dan akhirnya menemui masalahnya.

    Rujukan:
    Penapisan Binari Maven
    Kaedah lain untuk mendapatkan fail di bawah laluan kelas

    balas
    0
  • Batalbalas