EvgeniyQQQ
30-07-2007, 17:32
Добрый день! Пишу две программки (клиент и серверок на языке Java), одной из функций которых является передача файлов (от клиента к серверу). Читаю файл клиентом в переменную типа char и передаю его методом write(), который является методом класса BufferedWriter. Читаю из потока функцией read(), класса BufferedReader.
Проблема состоит в том, что когда я считываю 255 байт, передаю их по сети, выводимые в файл данные весят 270 байт. Откудато берутся 15 лишних байт. В начале файла появляется знак ?, в конце 14 символов форматирования (блокнот их отображает как пробелы). Выводя данные в файл, я указываю, что записываю 255 байт, но толку от этого нет.
Фрагмент кода клиента:
...
InputStream inputStream = new FileInputStream("C:\\example.xml");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
System.out.println("IP/MAC: ");
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String str = r.readLine();
r.close();
Socket s = new Socket(str, 32000);
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
char[] buf = new char[255];
int len = 0;
while ((len = inputStreamReader.read(buf, 0, buf.length)) > 0)
{
output.write(buf);
output.flash();
}
output.close();
inputStreamReader.close();
s.close();
...
Фрагмент кода сервера:
...
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
char[] buf = new char[255];
OutputStream outputStream = new FileOutputStream("C:\\exampleCopyXML.xml");
//Приводим поток к потоку форматированного вывода
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
int len = 0;
while (((len = in.read(buf))) > 0)
{
//Выводим в файл полученный пакет
outStreamWriter.write(buf,0,255);
}
in.close();
outStreamWriter.close();
...
Помогите, пожалуйста.
Проблема состоит в том, что когда я считываю 255 байт, передаю их по сети, выводимые в файл данные весят 270 байт. Откудато берутся 15 лишних байт. В начале файла появляется знак ?, в конце 14 символов форматирования (блокнот их отображает как пробелы). Выводя данные в файл, я указываю, что записываю 255 байт, но толку от этого нет.
Фрагмент кода клиента:
...
InputStream inputStream = new FileInputStream("C:\\example.xml");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
System.out.println("IP/MAC: ");
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String str = r.readLine();
r.close();
Socket s = new Socket(str, 32000);
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
char[] buf = new char[255];
int len = 0;
while ((len = inputStreamReader.read(buf, 0, buf.length)) > 0)
{
output.write(buf);
output.flash();
}
output.close();
inputStreamReader.close();
s.close();
...
Фрагмент кода сервера:
...
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
char[] buf = new char[255];
OutputStream outputStream = new FileOutputStream("C:\\exampleCopyXML.xml");
//Приводим поток к потоку форматированного вывода
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
int len = 0;
while (((len = in.read(buf))) > 0)
{
//Выводим в файл полученный пакет
outStreamWriter.write(buf,0,255);
}
in.close();
outStreamWriter.close();
...
Помогите, пожалуйста.