2015-11-10 5 views
8

Fino a jdk7u6 il metodo della sottostringa was lightning fast perché utilizzava semplicemente puntatori all'interno di una stringa esistente, quindi non richiedeva alcuna copia di memoria. Ho usato questa funzionalità estesamente nell'implementazione dei parser.Soluzione alternativa per il comportamento da jdk6 a jdk7 della sottostringa

Dato il periodo di tempo da quando è stata rimossa questa funzione di prestazioni critiche, è necessario sostituire alcune parti ben oliate.

Nota: Potrei teoricamente tornare indietro e copiare l'implementazione da jdk6. Ma IIRC è stato avvolto abbastanza pesantemente in tutta la classe String - cioè non facilmente estratto.

Quindi una tale implementazione giace intorno - ad esempio in una delle librerie di parser jvm ad alte prestazioni?

+0

Sto solo mantenendo un indice esterno, registrando dove siamo alla stringa. – ZhongYu

+0

@ bayou.io Ciò non risolve la necessità di estrarre e utilizzare la sottostringa in un metodo diverso, ad esempio. – javadba

+0

passa anche l'indice a quel metodo: D ... sostanzialmente sostituisce tutto '(String)' con '(String, int, int)'. (a meno che tu non possa farlo con il metodo di altre persone) fa schifo ovviamente ... – ZhongYu

risposta

5

Potrebbe essere possibile fare ciò che è necessario con CharBuffer, che implementa l'interfaccia CharSequence. Vedi, in particolare, CharBuffer.subSequence.

+0

Guardando l'impl per quello adesso .. CharBuffer è uno di quei ragazzi nio. Molto tempo fa erano abbastanza pesanti da istanziare (incerto se fosse cambiato ...) Dopo averne uno allora sì avrebbero soddisfatto i requisiti. Quindi inviterò a scadenza, ma aspetterò un po 'più a lungo per vedere se esiste un'alternativa potenzialmente più leggera. – javadba

Problemi correlati