code: package org.locationtech.spatial4j.io.benchmark;
  
  import org.locationtech.spatial4j.context.jts.JtsSpatialContext;
  import org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory;
  import org.locationtech.spatial4j.io.LegacyShapeWriter;
  import org.locationtech.spatial4j.io.ShapeIO;
  import org.locationtech.spatial4j.io.ShapeWriter;
  import org.locationtech.spatial4j.shape.Shape;
  
  import java.io.*;
  import java.text.NumberFormat;
  
  public class ShapeBenchmarks {
    
    public static void main(String[] args) throws Exception {
      
  
      JtsSpatialContextFactory factory = new JtsSpatialContextFactory();
      factory.geo = true;
      factory.normWrapLongitude = true;
      JtsSpatialContext ctx = new JtsSpatialContext(factory);
    
      PrintStream out = System.out;
  
      NumberFormat nf = NumberFormat.getPercentInstance();
      InputStreamReader in = new InputStreamReader(ShapeBenchmarks.class.getResourceAsStream("/samples.txt"));
      try (BufferedReader br = new BufferedReader(in)) {
        String line;
        while ((line = br.readLine()) != null) {
          line = line.trim();
          if(line.startsWith("#") || line.length()==0) {
            continue;
          }
  
          Shape shape = ctx.getFormats().getWktReader().read(line);
          
          double poly = ctx.getFormats().getWriter(ShapeIO.POLY).toString(shape).getBytes().length;
  
          out.println("Format | bytes | %poly | encoded");
          out.println("------ | ----- | ----- | -------");
          
  
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ctx.getBinaryCodec().writeShape(new DataOutputStream(baos), shape);
          
          out.print(" binary | ");
          out.print(baos.size());
          out.print(" | ");
          out.print(nf.format(poly/baos.size()));
          out.print(" | ");
          out.print("...");
          out.println();
          
          for(ShapeWriter writer : ctx.getFormats().getWriters()) {
            if(writer instanceof LegacyShapeWriter) {
              continue;
            }
            
            String str = writer.toString(shape);
            out.print(writer.getFormatName());
            out.print(" | ");
            out.print(str.length());
            out.print(" | ");
            out.print(nf.format(poly/str.getBytes().length));
            out.print(" | ");
            out.print(str);
            out.println();
          }
          out.println();
          out.println();
        }
      }
      
    }
  }
  