Provides optimised conversion from bytes to Strings for known HTTP methods. The bytes are assumed to be an ISO-8859-1 encoded representation of an HTTP method. The method is not validated as being a token, but only valid HTTP method names will be returned. Doing it this way is ~10x faster than u
(byte[] buf, int start, int len)
| 87 | * @return The HTTP method as a String or {@code null} if the method is not recognised. |
| 88 | */ |
| 89 | public static String bytesToString(byte[] buf, int start, int len) { |
| 90 | switch (buf[start]) { |
| 91 | case 'G': { |
| 92 | if (len == 3 && buf[start + 1] == 'E' && buf[start + 2] == 'T') { |
| 93 | return GET; |
| 94 | } |
| 95 | break; |
| 96 | } |
| 97 | case 'P': { |
| 98 | if (len == 4 && buf[start + 1] == 'O' && buf[start + 2] == 'S' && buf[start + 3] == 'T') { |
| 99 | return POST; |
| 100 | } else if (len == 3 && buf[start + 1] == 'U' && buf[start + 2] == 'T') { |
| 101 | return PUT; |
| 102 | } else if (len == 5 && buf[start + 1] == 'A' && buf[start + 2] == 'T' && buf[start + 3] == 'C' && |
| 103 | buf[start + 4] == 'H') { |
| 104 | return PATCH; |
| 105 | } else if (len == 8 && buf[start + 1] == 'R' && buf[start + 2] == 'O' && buf[start + 3] == 'P' && |
| 106 | buf[start + 4] == 'F' && buf[start + 5] == 'I' && buf[start + 6] == 'N' && |
| 107 | buf[start + 7] == 'D') { |
| 108 | return PROPFIND; |
| 109 | } else if (len == 9 && buf[start + 1] == 'R' && buf[start + 2] == 'O' && buf[start + 3] == 'P' && |
| 110 | buf[start + 4] == 'P' && buf[start + 5] == 'A' && buf[start + 6] == 'T' && |
| 111 | buf[start + 7] == 'C' && buf[start + 8] == 'H') { |
| 112 | return PROPPATCH; |
| 113 | } |
| 114 | break; |
| 115 | } |
| 116 | case 'H': { |
| 117 | if (len == 4 && buf[start + 1] == 'E' && buf[start + 2] == 'A' && buf[start + 3] == 'D') { |
| 118 | return HEAD; |
| 119 | } |
| 120 | break; |
| 121 | } |
| 122 | case 'O': { |
| 123 | if (len == 7 && buf[start + 1] == 'P' && buf[start + 2] == 'T' && buf[start + 3] == 'I' && |
| 124 | buf[start + 4] == 'O' && buf[start + 5] == 'N' && buf[start + 6] == 'S') { |
| 125 | return OPTIONS; |
| 126 | } |
| 127 | break; |
| 128 | } |
| 129 | case 'D': { |
| 130 | if (len == 6 && buf[start + 1] == 'E' && buf[start + 2] == 'L' && buf[start + 3] == 'E' && |
| 131 | buf[start + 4] == 'T' && buf[start + 5] == 'E') { |
| 132 | return DELETE; |
| 133 | } |
| 134 | break; |
| 135 | } |
| 136 | case 'T': { |
| 137 | if (len == 5 && buf[start + 1] == 'R' && buf[start + 2] == 'A' && buf[start + 3] == 'C' && |
| 138 | buf[start + 4] == 'E') { |
| 139 | return TRACE; |
| 140 | } |
| 141 | break; |
| 142 | } |
| 143 | case 'M': { |
| 144 | if (len == 5 && buf[start + 1] == 'K' && buf[start + 2] == 'C' && buf[start + 3] == 'O' && |
| 145 | buf[start + 4] == 'L') { |
| 146 | return MKCOL; |
no outgoing calls