Bonjour à tous!
Dans le cadre d'un projet personnel, je me tape la tête sur un problème
que je n'arrive pas à résoudre.
Mon but est d'insérer un .wav dans une colonne bytearea d'une table Postgresql,
et l'opération inverse, à savoir lire le BLOB et l'exporter dans un second fichier .wav...
Le problème est que la taille de mon fichier bis est quasiment le double, et j'ai beau chercher, je ne trouve pas pourquoi, j'ai la vague intuition que le problème vient de l'insertion en base...
le code de l'insertion
et celui du Select et export:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 statement.execute("TRUNCATE TABLE musique"); //Preparation du champ data File fichier = new File("test.wav"); System.out.println("Taille fichier: " + fichier.length()); InputStream in = new FileInputStream(fichier); //Insertion dans la base ps = connection.prepareStatement("INSERT INTO musique (title,id_album,tracknumber,id_artist,id_genre,date,data) VALUES (?,?,?,?,?,?,?)"); ps.setString(1, "Premier titre"); // title ps.setInt(2, 1); // id_album ps.setInt(3, 1); // tracknumber ps.setInt(4, 1); // id_artist ps.setInt(5, 1); // id_genre ps.setTimestamp(6, null); // date //ps.setBlob(7, in, (int) fichier.length()); //marche pas avec jdbc>3.0 ps.setBinaryStream(7, in, (int) fichier.length()); ps.execute(); ps.close(); in.close(); rs.close(); statement.close(); connection.close();
et la sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 String titre = "Premier titre"; resultset = statement.executeQuery("SELECT title, data FROM musique WHERE title = '" + titre + "' LIMIT 1"); resultset.next(); // System.out.println("Les lignes dans la base: "); // System.out.println(" TITLE = " + resultset.getString("title")); // System.out.println(" DATA = " + new String(resultset.getBytes("data"), 0, 32)); InputStream in = resultset.getBinaryStream("data"); File fichier_sortie = new File("testrecup.wav"); OutputStream out = new FileOutputStream(fichier_sortie); //Premier essai byte buffer[] = new byte[512 * 1024]; int nbLecture; while ((nbLecture = in.read(buffer)) != -1) { out.write(buffer, 0, nbLecture); } System.out.println("Taille fichier sortie: " + fichier_sortie.length()); out.flush(); out.close(); in.close(); resultset.close(); statement.close(); connection.close();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 run: TEST Titre: Premier titre Taille fichier: 50168204 Taille fichier sortie: 100336407 BUILD SUCCESSFUL (total time: 8 seconds)
Est-ce quelqu'un voit quelque chose qui cloche?
D'avance merci
Partager