Vakiodataa Javaohjelmaan - miten?
Mikä on paras tapa laittaavakiodataa javaohjelmaan - lähinnä tekstiä.
Kriteerinä tässä tilansäästö - jos (suomenkielistä) tekstiä on paljon, niin javan vakiomerkkijonojen käyttö vie 2 tavua/merkki.
UTF8 -koodauksella ä ja ö veisivät 2 tavua/merkki, kaikki muut 1 tavu/merkki.
Ympäristönä j2me ja matkapuhelin, eli tästä syystä tiedostosta lukeminen ei välttämättä ole järkevää tai edes mahdollista, vaan iso määrä vakiotekstiä pitäisi saada suoraan jar -tiedostoon (käytönnössä siis myös lähdekoodiin)
Vakiodataa Javaohjelmaan ?
7
556
Vastaukset
- ((((((((((((((((((((
--- ESIMERKKI ALKAA ---
public class VakioTekstit {
public static final String vakioJono= "Vakio dataa";
public static void main(String[] args) {
System.out.print(vakioJono);
}
}
--- ESIMERKKI LOPPUU ---- Javakoodaaja80
Merkkijonon "Vakio dataa" pituus on 11 merkkiä. Mutta koska java käyttää joko UTF16 -koodausta tai sitten ei edes tue merkkejä, joiden unicode -koodi > 65535, niin valitettavasti esittämälläsi tavalla tuo merkkijono vie tilaa 11*2=22 tavua.
Tarkoitus oli saada se mahtumaan 11 tavuun.
Tuo 16 bitin käyttö/merkki voisi olla perusteltua, jos esim. kirjoittaisin kiinalaisia katakana -merkkejä (joita on yli 256, joten ne eivät voi mahtua 1 tavuun/merkki).
Mutta suomenkielen merkistö on sellainen, jossa käytettäviä merkkejä < 256 erilaista, joten 1 tavu/1 merkki pitäisi olla mahdollista. - ((((((((((((((((((
Javakoodaaja80 kirjoitti:
Merkkijonon "Vakio dataa" pituus on 11 merkkiä. Mutta koska java käyttää joko UTF16 -koodausta tai sitten ei edes tue merkkejä, joiden unicode -koodi > 65535, niin valitettavasti esittämälläsi tavalla tuo merkkijono vie tilaa 11*2=22 tavua.
Tarkoitus oli saada se mahtumaan 11 tavuun.
Tuo 16 bitin käyttö/merkki voisi olla perusteltua, jos esim. kirjoittaisin kiinalaisia katakana -merkkejä (joita on yli 256, joten ne eivät voi mahtua 1 tavuun/merkki).
Mutta suomenkielen merkistö on sellainen, jossa käytettäviä merkkejä < 256 erilaista, joten 1 tavu/1 merkki pitäisi olla mahdollista.Kun kokeilin, niin kyllä tuo merkkijono class -tiedostoon 11 tavuna koodautui, eli 1 tavu/merkki. Jos merkkijonoon laittoi myös skandeja, niin vain skandit koodautuivat kahtena tavuna. Luulisi Javan käyttävän sisäisesti samaa koodausta mitä class tiedostostakin, eli niin että tuo vie muististakin sen 11 tavua.
- ((((((((((((((((((
(((((((((((((((((( kirjoitti:
Kun kokeilin, niin kyllä tuo merkkijono class -tiedostoon 11 tavuna koodautui, eli 1 tavu/merkki. Jos merkkijonoon laittoi myös skandeja, niin vain skandit koodautuivat kahtena tavuna. Luulisi Javan käyttävän sisäisesti samaa koodausta mitä class tiedostostakin, eli niin että tuo vie muististakin sen 11 tavua.
Tosiaan kun string olio ladataan muistiin, vie se yksi merkki sen jälkeen 2 tavua, koska stringin luokan sisällä on näköjään "private final char value[]" muuttuja merkkijonon säilytykseen.
- javakoodaaja80
(((((((((((((((((( kirjoitti:
Tosiaan kun string olio ladataan muistiin, vie se yksi merkki sen jälkeen 2 tavua, koska stringin luokan sisällä on näköjään "private final char value[]" muuttuja merkkijonon säilytykseen.
1. Siis onko todellakin niin, että ajoaikaista muistia javan merkkijono kuluttavat 2 tavua/merkki, mutta jar -tiedostossa vain 1 tavu/merkki, poikkeuksena esim. skandimerkit sielläkin 2 tavua/merkki ?
Eli siis RAM -muistissa UTF-16 tai kiinteä 2 tavua/merkki mutta jar -tiedostossa UTF-8 ?
JA ...
2. Onko javan valmisluokkien (esim. string) lähdekoodi jossain saatavilla?
Asensin joskus Netbeansin, mutta en ainakaan huomannut valmisluokkien lähdekoodeja.
Enkö vain osannut katsoa oikeaan paikkaan vai pitääkö nuo ladata erikseen netistä ? - ((((((((((((((((((
javakoodaaja80 kirjoitti:
1. Siis onko todellakin niin, että ajoaikaista muistia javan merkkijono kuluttavat 2 tavua/merkki, mutta jar -tiedostossa vain 1 tavu/merkki, poikkeuksena esim. skandimerkit sielläkin 2 tavua/merkki ?
Eli siis RAM -muistissa UTF-16 tai kiinteä 2 tavua/merkki mutta jar -tiedostossa UTF-8 ?
JA ...
2. Onko javan valmisluokkien (esim. string) lähdekoodi jossain saatavilla?
Asensin joskus Netbeansin, mutta en ainakaan huomannut valmisluokkien lähdekoodeja.
Enkö vain osannut katsoa oikeaan paikkaan vai pitääkö nuo ladata erikseen netistä ?1.
Class -tiedostossa käytetään koodausta, jossa vakio merkkijonot koodataan hieman UTF-8 tapaisesti, eli 1 tavu per merkki. Näkyy kun katsoo HEX editorilla class -tiedostoa, alla kuitenkin tarkempi linkki aiheeseen:
http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#7963
Jos merkkijono ladataan muistiin char taulukkoon (kuten alla olevissa linkissä olevat String luokien toteutukset tekevät), niin silloin muistiin ladattuna merkkijono vie tilaa 2 tavua per merkki, ellei sitten virtuaalikone tee jotain optimointia.
http://www.docjar.com/html/api/java/lang/String.java.html
http://kickjava.com/src/java/lang/String.java.htm
Sinänsä tuntuu järkevältä, että merkkijono vie muistiin ladattuna aina sen 2 tavua per merkki. Koska jos merkin pituus vaihtelisi muistissa, niin CharAt ja muiden merkin paikasta riippuvien metodien toteutus olisi varsin hankalaa, tai ne olisivat hitaita.
2.
En tiedä, googletin vain netistä, mahdollisia toteutuksia. Jotain open source juttuja Sunilla näyttää olevan:
http://download.java.net/openjdk/jdk6/
http://openjdk.java.net/
- hemmoit
Katso esimerkki Class.getResourceAsStream()
http://forums.sun.com/thread.jspa?threadID=780633&messageID=4440545
Käytä ISO 8859-1 koodausta säästät sen yhden tavun...
HC ratkaisu on koodata data "ISO 8859-1" heksana koodiin ja käytää stringin constructoria joka ottaa koodauksen huomioon.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Lääppijä Lindtman jäi kiinni itse teosta
Lindtman kyselemättä ja epäasiallisesti koskettelee viestintäpäällikköä. https://www.is.fi/politiikka/art-20000117808521703896Huomaatteko Demari Tytti ei esitä pahoitteluitaan
Samanlainen ilmeisesti kuin Marin eli Uhriutuu no he ovat Demareita ja muiden yläpuolella siis omasta mielestään813099Turvaan tulleet lähettävät omia lapsiaan vaaraan - hullua
MOT-ohjelman jakso ”Loma vaihtui kahleisiin” kertoi, kuinka Suomessa ja muualla Euroopassa asuvat somaliperheet lähettäv462143Vedonlyöntiä .
Olen valmis lyömään ison vedon , että homma kaatuu . Jos kerta Sivonen ei lähde mukaan , niin ei tuoho usko kukaan muuka232073Mikä on pahinta, mitä kaivatullesi
pelkäät tapahtuvan? Jos kuolemaa, vakavia sairauksia yms. ei lasketa?541921TUNNISTELAATIKKO
Tähän ketjuun voi laittaa yhdellä tai kahdella lauseella (tai vaikka yhdellä sanalla) täydellisen tunnisteen, jonka vain851341- 401270
Tykkäätkö enemmän tavis- vai julkkiskisaajista tv:ssä?
Tykkäätkö enemmän tavis- vai julkkiskisaajista tv:ssä? Moni reality ja visailuohjelma luottaa julkkiksiin, mutta sentään251268Zoo jatkaa - jatkuuko mustamaalaus?
Tänään on päätetty Zoon avaamisesta uudelleen. Mielenkiintoista nähdä kautokurujen reaktio, nyt kun kyse ei ole kunnalli581048Valehdella saa, totuus salataan
Vaikuttaa vähän siltä, että sensuuria toteutetaan juorupalstallakin. Asioita saa kaunistella ja vääristellä, mutta totuu10758