21. april 2004 - 11:14Der er
20 kommentarer og 1 løsning
Dataudveksling via binære data til Java
Hej... jeg står overfor at skulle få java (på en mobiltelefon) og noget C# til at snakke sammen ved at konvertere mine C# objekter om til binær data og sende dem til Java....
Jeg har derfor som start lavet følgende to testprogrammer for at se om jeg kunne få lavet to filer der binært er ens.
C# **** FileStream fs = new FileStream(@"C:\test.bin", FileMode.CreateNew); BinaryWriter mitOutput = new BinaryWriter(fs,System.Text.Encoding.UTF8); mitOutput.Write("Hej med dig"); mitOutput.Write(123); mitOutput.Write(true); mitOutput.Write(9.9); mitOutput.Flush(); mitOutput.Close(); fs.Close();
1) at data fylder det samme f.eks. at C# Write(9.9) og Java writeDouble udskriver det samme antal bytes
2) at data er en encoded f.eks. at C# Write(true) og Java writeBoolean(true) bruger samme størrlese og værdi for true
3) at text udskrives med samme encoding, UTF-8 versus ISO-8859-1/CP-1252
4) at tal udskrives med samme endianness, little endian versus big endian
Du har helt styr på #3. #2 skulle også være OK. #1 er nem at checke ved at se om filem har forskellig størrelse.
Mit gæt er helt klar #4. Java DataOutputStream udskriver i net order d.v.s. big endian. Det lyder ikke usandsyneligt at .NET er Intel x86 centric og derfor bruger little endian.
Hmm... Det ser også ud til at være et problem med #1 Java fylder 23byte mens C# fylder 25byte
Ligeledes ser det ud til at rækkefølgen på data'ene bliver byttet om på en eller anden måde (Prøver lige at se om man kan copy-paste dataenen ind her)
JAVA: ----------------------------- Hej med dig{@#ÌÌÌÌÌÍ ----------------------------- (her er det især det første tomme tegn der forvirre mig.. det er hex 00, samt )
C#: ----------------------------- Hej med dig{ ÍÌÌÌÌÌ#@ ----------------------------- (Her sidder #@ til sidst i strengen og ikke som i javas i midten)
Java writeUTF prefixer bogstaverne med 2 bytes med længden af strengen
.NET Write String er lidt mere uklar på det område, fra docs:
Remarks A length-prefixed string represents the string length by prefixing to the string a single byte or word that contains the length of that string.
Du kan jo bare prøve at køre mit C# program og det sidste af mine Java programmer.
Output er rigtigt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.