diff --git a/README b/README
index 5006cda..2e8517b 100644
--- a/README
+++ b/README
@@ -6,6 +6,8 @@ See http://wiki.openstreetmap.org/wiki/PBF_Format .
There is a Java and a C version of the PBF library code here.
+For a Java usage example, see src.java\crosby\binary\test\ReadFileExample.java
+
C Version
=========
diff --git a/pom.xml b/pom.xml
index d1e3024..f5172dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,8 @@
${basedir}/src.java
${basedir}/build
+ ${basedir}/resources
+
org.apache.maven.plugins
diff --git a/resources/sample.pbf b/resources/sample.pbf
new file mode 100644
index 0000000..8a22edf
Binary files /dev/null and b/resources/sample.pbf differ
diff --git a/src.java/crosby/binary/test/ReadFileExample.java b/src.java/crosby/binary/test/ReadFileExample.java
new file mode 100644
index 0000000..082d406
--- /dev/null
+++ b/src.java/crosby/binary/test/ReadFileExample.java
@@ -0,0 +1,86 @@
+package crosby.binary.test;
+
+import crosby.binary.*;
+import crosby.binary.Osmformat.*;
+import crosby.binary.file.*;
+import java.io.*;
+import java.util.List;
+
+/**
+ * Demonstrates how to read a file. Reads sample.pbf from the resources folder
+ * and prints details about it to the standard output.
+ *
+ * @author Michael Tandy
+ */
+public class ReadFileExample {
+
+ public static void main(String[] args) throws Exception {
+ InputStream input = ReadFileExample.class.getResourceAsStream("/sample.pbf");
+ BlockReaderAdapter brad = new TestBinaryParser();
+ new BlockInputStream(input, brad).process();
+ }
+
+ private static class TestBinaryParser extends BinaryParser {
+
+ @Override
+ protected void parseRelations(List rels) {
+ if (!rels.isEmpty())
+ System.out.println("Got some relations to parse.");
+ Relation r = null;
+ }
+
+ @Override
+ protected void parseDense(DenseNodes nodes) {
+ long lastId=0;
+ long lastLat=0;
+ long lastLon=0;
+
+ for (int i=0 ; i nodes) {
+ for (Node n : nodes) {
+ System.out.printf("Regular node, ID %d @ %.6f,%.6f\n",
+ n.getId(),parseLat(n.getLat()),parseLon(n.getLon()));
+ }
+ }
+
+ @Override
+ protected void parseWays(List ways) {
+ for (Way w : ways) {
+ System.out.println("Way ID " + w.getId());
+ StringBuilder sb = new StringBuilder();
+ sb.append(" Nodes: ");
+ long lastRef = 0;
+ for (Long ref : w.getRefsList()) {
+ lastRef+= ref;
+ sb.append(lastRef).append(" ");
+ }
+ sb.append("\n Key=value pairs: ");
+ for (int i=0 ; i