You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by js...@apache.org on 2023/11/24 10:21:41 UTC

(sis) branch geoapi-4.0 updated: fix(Shapefile): replace skipBytes by seek, more efficient and avoids a loop

This is an automated email from the ASF dual-hosted git repository.

jsorel pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 54a78ecf62 fix(Shapefile): replace skipBytes by seek, more efficient and avoids a loop
54a78ecf62 is described below

commit 54a78ecf623a37156cd546337a592cee0ccd958a
Author: jsorel <jo...@geomatys.com>
AuthorDate: Fri Nov 24 11:21:24 2023 +0100

    fix(Shapefile): replace skipBytes by seek, more efficient and avoids a loop
---
 .../main/org/apache/sis/storage/shapefile/dbf/DBFField.java           | 2 +-
 .../main/org/apache/sis/storage/shapefile/dbf/DBFHeader.java          | 2 +-
 .../main/org/apache/sis/storage/shapefile/dbf/DBFReader.java          | 4 ++--
 .../main/org/apache/sis/storage/shapefile/shp/ShapeHeader.java        | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFField.java b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFField.java
index 1465e84060..85976ea76a 100644
--- a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFField.java
+++ b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFField.java
@@ -139,7 +139,7 @@ public final class DBFField {
         final int fieldAddress   = channel.readInt();
         final int fieldLength    = channel.readUnsignedByte();
         final int fieldDecimals = channel.readUnsignedByte();
-        channel.skipBytes(14);
+        channel.seek(channel.getStreamPosition() + 14);
         return new DBFField(fieldName, fieldType, fieldAddress, fieldLength, fieldDecimals, charset);
     }
 
diff --git a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFHeader.java b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFHeader.java
index a20c4ddfcf..dde089f6d6 100644
--- a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFHeader.java
+++ b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFHeader.java
@@ -76,7 +76,7 @@ public final class DBFHeader {
         nbRecord   = channel.readInt();
         headerSize = channel.readUnsignedShort();
         recordSize = channel.readUnsignedShort();
-        channel.skipBytes(20);
+        channel.seek(channel.getStreamPosition() + 20);
         fields     = new DBFField[(headerSize - FIELD_SIZE - 1) / FIELD_SIZE];
 
         for (int i = 0; i < fields.length; i++) {
diff --git a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFReader.java b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFReader.java
index a2dbf4a764..848743b5ac 100644
--- a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFReader.java
+++ b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/dbf/DBFReader.java
@@ -73,7 +73,7 @@ public final class DBFReader implements AutoCloseable {
 
         final int marker = channel.readUnsignedByte();
         if (marker == TAG_DELETED) {
-            channel.skipBytes(header.recordSize);
+            channel.seek(channel.getStreamPosition() + header.recordSize);
             return DBFRecord.DELETED;
         } else if (marker == TAG_EOF) {
             return null;
@@ -97,7 +97,7 @@ public final class DBFReader implements AutoCloseable {
                     record.fields[k++] = header.fields[i].readValue(channel);
                 } else {
                     //skip this field
-                    channel.skipBytes(header.fields[i].fieldLength);
+                    channel.seek(channel.getStreamPosition() + header.fields[i].fieldLength);
                 }
             }
         }
diff --git a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/shp/ShapeHeader.java b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/shp/ShapeHeader.java
index 5c177f5238..dd89bdd7c8 100644
--- a/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/shp/ShapeHeader.java
+++ b/incubator/src/org.apache.sis.storage.shapefile/main/org/apache/sis/storage/shapefile/shp/ShapeHeader.java
@@ -77,7 +77,7 @@ public final class ShapeHeader {
             throw new IOException("Incorrect file signature");
         }
         //skip unused datas
-        channel.skipBytes(5*4);
+        channel.seek(channel.getStreamPosition() + 5*4);
         fileLength = channel.readInt() * 2; //in 16bits words
 
         channel.buffer.order(ByteOrder.LITTLE_ENDIAN);