• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Сериализация объектов в java с помощью XMLEncoder

  • Автор темы Автор темы GER
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

GER

Новые
Регистрация
13 Дек 2010
Сообщения
37
Реакции
1
Баллы
0
Сериализация объектов в java с помощью XMLEncoder

Ой, простите, промахнулся разделом... Но, может, и здесь помогут.

В общем, проблема такова: мне надо сериализовать объект в XML файл. При использовании XMLEncoder пишет:
java.lang.IllegalAccessException: Class sun.reflect.misc.Trampoline can not access a member of class task4.Task4$Zachotka with modifiers "public"
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Task4$Zachotka);
Continuing ...


Код

package task4;

import java.io.*;
import java.util.Scanner;
import java.beans.XMLEncoder;
import java.beans.XMLDecoder;


public class Task4 {

private static class Zachotka implements java.io.Serializable{
public Zachotka(){}
static class Session
{
int NumOfSubj;
int marks[];
String subjects[];

Session(Scanner eye) {
eye.nextInt();
this.NumOfSubj = eye.nextInt();
this.subjects = new String[NumOfSubj];
this.marks = new int[NumOfSubj];
for (int j = 0; j < NumOfSubj; ++j) {
this.subjects[j] = eye.next();
this.marks[j] = eye.nextInt();
}
}
}

static private String name, fam, otch;
static private int kyrs, grope, ClosedSession;
private static Session etap[] = new Session[10];
//public void writeObject(){}
Zachotka(Scanner eye) {

this.name = eye.next();
this.fam = eye.next();
this.otch = eye.next();
this.kyrs = eye.nextInt();
this.grope = eye.nextInt();
this.ClosedSession = eye.nextInt();
for (int i = 0; i < ClosedSession; ++i) {
etap = new Session(eye);
}
}
}




public static void main(String[] args) throws FileNotFoundException {


try {
FileInputStream in = new FileInputStream("input.txt");
Scanner eye = new Scanner(in, "cp1251");
eye.useDelimiter("[-.,:=_;()?!\" \t\n\r]+");

Zachotka NZ = new Zachotka(eye);


FileOutputStream out = new FileOutputStream("Zachotka.xml");
XMLEncoder xmlEncoder = new XMLEncoder(out);
xmlEncoder.writeObject(NZ);
xmlEncoder.flush();
xmlEncoder.close();
}

catch (IOException e)
{
System.out.printf("Ошибка ввода");
}

}
}


Как, собственно надо описать класс, чтобы он сериализовался с помощью XMLEncoder ?tehno015

Тему перемещаю.
 
Собственно, разобрался, хотя и убил кучу времени. Использование XMLEncoder и XMLDecoder требует оформления сериализуемого класса по правилам JavaBean: Каждое поле класса должно иметь get и set методы в соответствии с соглашением об именах, класс должен иметь конструктор без параметров и т. д. в общем, :closed:
 
Тема закрыта по просьбе автора.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху