Toon posts:

[java] Object en Array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeiedag,

Ik zit met het volgende probleem:

Ik maak gebruik van een java interface naar een database. Als ik data van een element van de database opvraag, dan krijg ik deze terug als een Object. Op zich niks mis mee.

Het Object bestaat uit een Array of uit een Array van Array's. Op zich nog steeds niks mis mee, want ik kan de gegevens opvragen van de Array elementen met de functie get(Object,index)

Maareh, mocht het Object een image zijn van 800 * 600 dan kan je rustig even gaan slapen :Z :Z als je dit elementje voor elementje op moet halen

Dus mijn vraag: weet iemand hoe ik blokken data uit een Array kan halen als ik al weet wat de dimensies van de data moet zijn?


Groeten,

Tim

p.s. met Array's bedoel ik hier java.lang.reflect.Array

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kan kiezen om er een blob (kan een java object zijn) of iets dergelijks in te zetten ipv een array. Dat hoef je niet pixel voor pixel uit te lezen. Weet niet of dit antwoord is op je vraag, omdat je misschien wel met een array wil werken.

Verwijderd

Topicstarter
Ik zou er heel graag iets anders in willen stoppen, maar ik ben niet degene die er een Array in stopt. Dit doet de interface van de database :( Dat kan volgens mij veel beter, maar ja

Het is sowieso lekker snel....ahummm....aangezien er met JNI Native c-code word aangesproken :Z

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 10 september 2001 23:19 schreef mr.beidehand het volgende:
Ik zou er heel graag iets anders in willen stoppen, maar ik ben niet degene die er een Array in stopt. Dit doet de interface van de database :( Dat kan volgens mij veel beter, maar ja

Het is sowieso lekker snel....ahummm....aangezien er met JNI Native c-code word aangesproken :Z
Tegen het pixel voor pixel ophalen kan zelfs de snelste c code niet tegenop tegenop. Je hebt gigantisch veel overhead en daar kom je op deze manier niet vanaf.

Zet jij dit plaatje (of een van je mede programmeurs) in de db als een 2 dimensionale array van pixels? Want dan zou ik er echt voor kiezen om dat plaatje niet zo op te gaan slaan. En pixel voor pixel een plaatje op slaan is gigantisch inefficient, waarom dacht je dat ze gif,jpg ed hebben uitgevonden?

Verwijderd

Topicstarter
Op dinsdag 11 september 2001 10:26 schreef Alarmnummer het volgende:
Zet jij dit plaatje (of een van je mede programmeurs) in de db als een 2 dimensionale array van pixels? Want dan zou ik er echt voor kiezen om dat plaatje niet zo op te gaan slaan. En pixel voor pixel een plaatje op slaan is gigantisch inefficient, waarom dacht je dat ze gif,jpg ed hebben uitgevonden?
Dat laatste ben ik helemaal met je eens.

Op de eerste vraag kan ik gelukkig nee antwoorden. Het is een database formaat van buitenaf en daarbij word een java interface geleverd, en die interface is dus de boosdoener. Die geeft mij een object terug met daarin een twee dimensionale array

Ze doen dit omdat er ook data van minder en meer dimensies in kunnen staan. Het is niet zo dat je alleen maar images kan opvragen.
Ik krijg dus altijd een Array Object terug en moet dan zelf de dimensies checken van de array.

Maar ik heb dus geen flauw idee hoe ik blokken data kan lezen uit een Object wat een Array is. Ik begrijp dat jij dat ook niet weet?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kan een java array omzetten naar een blob (een lading bytes) en die in de db stoppen. En bij het inlezen converteer je die blob weer naar een array. Er zijn intussen wel meer geavanceerde technieken, maar dit is wel een oudje die het bij mij nog goed doet. Het is alleen vervelend als ook andere applicaties (geschreven in andere talen dan java) met die blob moeten werken, meestal kunnen ze er niets mee.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

wat fragmenten uit een programma, hoop dat je er iets meekan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//lezen

selectProjectOpProjectNrPrepStmt = con.prepareStatement
("SELECT project_blob FROM Project WHERE ProjectNr = ?");
        
Vector projectVector = new Vector();
        
ResultSet rs = selectProjectOpProjectPrepStmt.executeQuery();
            
while (rs.next())
{
    byte[] regBytes = rs.getBytes("Project_Blob");
      ByteArrayInputStream regArrayStream = new ByteArrayInputStream(regBytes);
        ObjectInputStream regObjectStream = new ObjectInputStream(regArrayStream);
    Project project= (Project)regObjectStream.readObject();
    project.setUitDatabase(true);   
    projectVector.add(project);
}

//schrijven

insertPrepStmt = con.prepareStatement("INSERT INTO PROJECT
 (projectNr,omschrijving,klantNr,orderNr,project_blob) VALUES (?,?,?,?,?)");    
    
ByteArrayOutputStream regStore = new ByteArrayOutputStream();
              
ObjectOutputStream regObjectStream = new ObjectOutputStream(regStore);
         
regObjectStream.writeObject(project);

byte[] regBytes=regStore.toByteArray();
      
regObjectStream.close();
      
regStore.close();
              
ByteArrayInputStream regArrayStream = new ByteArrayInputStream(regBytes);
              
//zet alle waarde in de insert statement
insertPrepStmt.setBinaryStream(5, regArrayStream, regBytes.length);

insertPrepStmt.executeUpdate()

En als je er nou een project in stopt of een array, maakt niet veel uit.
Pagina: 1