Bemærk: I det følgende benyttes ordet fil slet ikke, når der tales om indhold. Runtime-indholdsprogrammet antager ikke, at indholdet er opbevaret i en fil i filsystemet. Men det indeholder protokol, der tillader, at indholdstyper knyttes til filnavngivningsmønstre. I virkeligheden repræsenterer disse filnavne filer i filsystemet, men der er intet i implementeringen af indholdssystemet, der antager, at indholdet er placeret i filsystemet. Filkodning og indholdstyper omhandler de filorienterede indholdstypeegenskaber, som platformens ressource-plugin leverer, og bør læses af de udviklere, der er interesseret i at bruge indholdstype-API'et i den kontekst.
Indholdstyper repræsenteres ved IContentType. Denne grænseflade repræsenterer en entydig indholdstype, der kan læse en datastrøm og fortolke indholdstypespecifikke oplysninger. Indholdstyper er opbygget hierarkisk. En indholdstype for XML-data betragtes f.eks. som værende underordnet i forhold til tekstindholdstypen. Derved kan nye indholdstyper udnytte attributterne eller funktionerne fra de mere generelle indholdstyper.
IContentTypeManager er det indgangspunkt, der giver adgang til det meste indholdstyperelaterede API, som leveres af platform-runtime. For at hente en reference til platformensIContentTypeManager kan klienter bruge Platform-API'et:
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
Klienter kan bruge platformens IContentTypeManager til at undersøge systemets indholdstyper.
For en given bytestrøm er det muligt at bestemme dens indhold ved at kalde IContentTypeManager-API'et på følgende måde:
InputStream stream = ...; IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml"); stream.close();
Den meste relevante IContentType
returneres, forudsat at der gives input, ellers returneres null
, hvis ingen input er fundet. Flere indholdstyper kan være relevante for en given datastrøm. I det tilfælde bruger platformen heuristik til at bestemme, hvilken der skal vælges. Filnavnet er det første kriterium, som udvælgelsen af en indholdstype baseres på. Det kan udelades, men det skaber to problemer: resultatet er muligvis ikke så korrekt, da mange ikke-relaterede indholdstyper muligvis accepterer det samme input. Antallet af forekomster er meget stort, da alle indholdstyper i platformen skal have en mulighed for at analysere strømmen. Medmindre et filnavn ikke er tilgængeligt, bør klienter altid angive et filnavn sammen med strømmen.
En anden interessant funktion, der indgår i platformens indholdstypestøtte, er muligheden for at beskrive indholdet af en binær strøm eller en tegnstrøm. Følgende stykke kode viser, hvordan det gøres:
InputStream stream = ...; IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml"); stream.close();
Den IContentDescription-forekomst, der returneres, beskriver indholdstypen og yderligere relevante oplysninger, der er udledt af det leverede indhold. Indholdsbeskrivelsen lagrer indholdsspecfikke egenskaber i form af nøgle/værdi-par. Selve platformen er i stand til at beskrive egenskaber, f.eks. tegnsæt og byterækkefølgen for tekstbaserede strømme, men andre kan defineres efter indholdstypeudbydere.
Nye indholdstyper defineres ofte med udgangspunkt i eksisterende indholdstyper. Dette hierarki etablerer en "is a"-relation mellem en afledt indholdstype og dens basistype. Plugin-udviklere skal respektere dette, når de implementerer kontekstafhængige funktioner. Hvis en given funktion kan anvendes sammen med en given indholdstype, skal funktionen også kunne anvendes sammen med en hvilken som helst afledt indholdstype. Ved hjælp af metoden IContentType.isKindOf(IContentType superType) kan det bestemmes, om to IContentTypes er beslægtet. Og vha. metoden IContentType.getBaseType() kan basistypen for en given IContentType bestemmes.