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

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

membalas semua(1)
黄舟

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!