Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68

    CharBuffer e il metodo array()

    Sto cercando di scrivere un metodo che stampi il contenuto dl un oggetto ByteBuffer, o meglio, prima stampi il contenuto come sequenza di byte e successivamente come sequenza di caratteri. Questo è il codice che ho finora sviluppato:

    codice:
    public static void printByteBuffer(ByteBuffer buf) {
        for (byte b : buf.array())
    	System.out.format("%02X ", b);
    		
        System.out.print("| ");
    	     
        for (char c : buf.asCharBuffer().array())
    	System.out.print(c);
    		
        System.out.println();
    }
    Nonostante compili quando viene eseguito solleva un eccezzione di tipo "UnsupportedOperationException" e presumibilmente la cosa è da associare alla creazione dell'array di caratteri in quanto l'output che ottengo è del seguente tipo:

    codice:
    69 6D 70 6F 72 74 20 6A 61 76 61 2E 69 6F 2E 2A | java.lang.UnsupportedOperationException

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: CharBuffer e il metodo array()

    Originariamente inviato da M@P
    solleva un eccezzione di tipo "UnsupportedOperationException" e presumibilmente la cosa è da associare alla creazione dell'array di caratteri
    Dalla documentazione di array():

    UnsupportedOperationException - If this buffer is not backed by an accessible array

    Sei in questo caso?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Sì, ma cosa significa?
    Sapresti spiegarmelo?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da M@P
    Sì, ma cosa significa?
    Sapresti spiegarmelo?
    Un ByteBuffer può essere creato con:
    allocate(int capacity)
    o
    wrap(byte[] array) oppure wrap(byte[] array, int offset, int length)

    In questi casi c'è un "backing array" (quello che ha istanziato lui o ovviamente quello che hai passato tu).

    Può anche essere creato con:
    allocateDirect(int capacity)

    La documentazione però non precisa se debba avere o no un backing array (dipende da come sono implementate le cose e può variare).

    E può anche essere creato come "memory mapping" di un file (MappedByteBuffer) e qui non ha un backing array.

    Se non ha un backing array, allora hasArray() ritorna false e ovviamente non puoi invocare array() (perché non ha un array interno da ritornare!).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.