diff --git a/unknow-server-bench/src/main/java/unknow/server/bench/BenchJaxb.java b/unknow-server-bench/src/main/java/unknow/server/bench/BenchJaxb.java index 45bee18e..a1b57aa5 100644 --- a/unknow-server-bench/src/main/java/unknow/server/bench/BenchJaxb.java +++ b/unknow-server-bench/src/main/java/unknow/server/bench/BenchJaxb.java @@ -3,7 +3,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.Reader; import java.io.StringReader; @@ -49,7 +48,7 @@ private static void bench(JAXBContext c) throws JAXBException, IOException { } if (!(o instanceof Complex)) throw new JAXBException(o.getClass().getName()); - c.createMarshaller().marshal(o, DUMP); + c.createMarshaller().marshal(o, NullOutputStream.INSTANCE); } @Benchmark @@ -66,18 +65,4 @@ public void reference() throws JAXBException, IOException { public void moxy() throws JAXBException, IOException { bench(MOXY); } - - private static final OutputStream DUMP = new OutputStream() { - @Override - public void write(int b) throws IOException { // OK - } - - @Override - public void write(byte[] b) throws IOException { // OK - } - - @Override - public void write(byte[] b, int off, int len) throws IOException { // OK - } - }; } diff --git a/unknow-server-bench/src/main/java/unknow/server/bench/EncoderDecoder.java b/unknow-server-bench/src/main/java/unknow/server/bench/EncoderDecoder.java index eb6bb655..5348970f 100644 --- a/unknow-server-bench/src/main/java/unknow/server/bench/EncoderDecoder.java +++ b/unknow-server-bench/src/main/java/unknow/server/bench/EncoderDecoder.java @@ -33,4 +33,10 @@ public String charset() { d.decode(b, c, true); return c.flip().toString(); } + + @Benchmark + public String string() { + byte[] bytes = DATA.getBytes(StandardCharsets.UTF_8); + return new String(bytes, StandardCharsets.UTF_8); + } } diff --git a/unknow-server-bench/src/main/java/unknow/server/bench/Main.java b/unknow-server-bench/src/main/java/unknow/server/bench/Main.java index cdef8425..8029c2f5 100644 --- a/unknow-server-bench/src/main/java/unknow/server/bench/Main.java +++ b/unknow-server-bench/src/main/java/unknow/server/bench/Main.java @@ -17,7 +17,7 @@ public class Main { public static void main(String[] args) throws Exception { - Options o = new OptionsBuilder().forks(1).measurementIterations(10).verbosity(VerboseMode.NORMAL).warmupIterations(5).build(); + Options o = new OptionsBuilder().forks(1).measurementIterations(10).verbosity(VerboseMode.SILENT).warmupIterations(5).build(); try (PrintStream w = args.length > 0 ? new PrintStream(Files.newOutputStream(Paths.get(args[0])), false, StandardCharsets.UTF_8) : System.out) { for (Class c : Arrays.asList(EncoderDecoder.class, BenchJaxb.class, BenchDocument.class, BenchProtostuff.class)) { diff --git a/unknow-server-bench/src/main/java/unknow/server/bench/NullOutputStream.java b/unknow-server-bench/src/main/java/unknow/server/bench/NullOutputStream.java new file mode 100644 index 00000000..97c9080c --- /dev/null +++ b/unknow-server-bench/src/main/java/unknow/server/bench/NullOutputStream.java @@ -0,0 +1,24 @@ +package unknow.server.bench; + +import java.io.IOException; +import java.io.OutputStream; + +public class NullOutputStream extends OutputStream { + public static final NullOutputStream INSTANCE = new NullOutputStream(); + + private NullOutputStream() { + } + + @Override + public void write(int b) throws IOException { // OK + } + + @Override + public void write(byte[] b) throws IOException { // OK + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { // OK + } + +} diff --git a/unknow-server-bench/src/main/java/unknow/server/bench/Time.java b/unknow-server-bench/src/main/java/unknow/server/bench/Time.java new file mode 100644 index 00000000..c3628001 --- /dev/null +++ b/unknow-server-bench/src/main/java/unknow/server/bench/Time.java @@ -0,0 +1,16 @@ +package unknow.server.bench; + +import org.openjdk.jmh.annotations.Benchmark; + +public class Time { + + @Benchmark + public long nanoTime() { + return System.nanoTime(); + } + + @Benchmark + public long currentMillies() { + return System.currentTimeMillis(); + } +} diff --git a/unknow-server-jaxb/src/main/java/unknow/server/jaxb/NsCollector.java b/unknow-server-jaxb/src/main/java/unknow/server/jaxb/NsCollector.java index d72cba82..3f71caad 100644 --- a/unknow-server-jaxb/src/main/java/unknow/server/jaxb/NsCollector.java +++ b/unknow-server-jaxb/src/main/java/unknow/server/jaxb/NsCollector.java @@ -172,8 +172,12 @@ public static final Map buildNsMapping(Map ns) if (map.isEmpty()) map.put(it.next(), ""); int i = 0; - while (it.hasNext()) - map.put(it.next(), prefix(i++)); + while (it.hasNext()) { + String p = prefix(i++); + if (p.equals("xml") || p.equals("xmlns")) + p = prefix(i++); + map.put(it.next(), p); + } return map; } @@ -196,7 +200,7 @@ public static final String prefix(int t) { int i = t % PREFIX_FIRST.length; sb.append(PREFIX_FIRST[i]); t -= i; - while (t > PREFIX_OTHER.length) { + while (t >= PREFIX_OTHER.length) { i = t % PREFIX_OTHER.length; sb.append(PREFIX_OTHER[i]); t -= i; diff --git a/unknow-server-servlet/src/main/java/unknow/server/servlet/utils/PathTree.java b/unknow-server-servlet/src/main/java/unknow/server/servlet/utils/PathTree.java index 36ff5326..3dfe7b47 100644 --- a/unknow-server-servlet/src/main/java/unknow/server/servlet/utils/PathTree.java +++ b/unknow-server-servlet/src/main/java/unknow/server/servlet/utils/PathTree.java @@ -51,7 +51,7 @@ private FilterChain tryFind(ServletRequestImpl req, PartNode last, String path, if (n == null) break; if (l < 0) { - req.setPathInfo(i - 1); + req.setPathInfo(path.length()); return n.exact; } last = n;