Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
Domestic Cat
Дата 26.7.2004, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Ага, забыл про такую возможность. Без Runtime.exec(), в общем, без ОС.


--------------------

PM   Вверх
ElectricalStorm
Дата 30.7.2004, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



Не совсем уверен что это то
но метод в одну строчку smile.gif

Код

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFile {

   public static void main(String[] args) throws IOException {
       long t = System.currentTimeMillis();
       copyFile("c:\\file", "c:\\copy_file");
       System.out.println(System.currentTimeMillis() - t);
   }

   public static void copyFile(String infile, String outfile) throws IOException {
       new FileOutputStream(outfile).getChannel().transferFrom(
               new FileInputStream(infile).getChannel(),
               0,
               new FileInputStream(infile).getChannel().size());
   }

}


вот стандратный метод ( правда немного надуманный smile.gif ) который для больших файлов работает быстрее
Код

public static void copyFile(String infile, String outfile) throws IOException {
       FileChannel fcin =  new FileInputStream(infile).getChannel();
       FileChannel fcout = new FileOutputStream(outfile).getChannel();

       for(ByteBuffer bb  = ByteBuffer.allocateDirect((int)Math.pow(2D, 16D));
                 fcin.read((ByteBuffer)bb.clear()) != -1;
                 fcout.write((ByteBuffer)bb.flip()));
}


Это сообщение отредактировал(а) ElectricalStorm - 30.7.2004, 12:39


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Domestic Cat
Дата 30.7.2004, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



smile.gif Полезная вешь - nio biggrin.gif

Вопрос: в таком коде:
Код

MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
myMethod(obj1, obj2);
...

public void myMehtod(MyObject o1, MyObject o2)
{
...
}

obj1 и obj2 передаются по значанию (by value) или по ссылке (by reference)?

Это сообщение отредактировал(а) Domestic Cat - 30.7.2004, 15:11


--------------------

PM   Вверх
AntonSaburov
Дата 30.7.2004, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Полезная вешь - nio

Если бы FAQ внимательнее почитали, то сразу бы нашли smile.gif
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 30.7.2004, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Если бы FAQ внимательнее почитали, то сразу бы нашли


Кто? Я собственно и имел в виду transferFrom smile.gif


Added:

Вопрос остается - obj1, obj2 передаются по ссылке или по значению ?

Это сообщение отредактировал(а) Domestic Cat - 30.7.2004, 17:44


--------------------

PM   Вверх
ElectricalStorm
Дата 2.8.2004, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



мне кажется по ссылке


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Domestic Cat
Дата 2.8.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А я думаю, что Java всегда все передает по значению smile.gif

Это сообщение отредактировал(а) Domestic Cat - 2.8.2004, 15:59


--------------------

PM   Вверх
AntonSaburov
Дата 2.8.2004, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
А я думаю, что Java всегда все передает по значению

Ну это уже спор достаточно теоретический IMHO.
В принципе obj1 и obj2 являются ссылками и вот сами ссылки передаются как значения - они копируются.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 2.8.2004, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Скорее так: в Java "pass-by-reference" обрело несколько другой смысл, чем, например, в C++.

В C++ код

Код


void swap(SomeType& arg1, SomeType& arg2)
{
 SomeType temp = arg1;
 arg1 = arg2;
 arg2 = temp;
}

SomeType var1 = ...;
SomeType var2 = ...;
swap(var1, var2);



изменит оригинальные var1, var2. В Java этот же самый код изменит локальные arg1, arg2, тогда как var1 и var2 не изменятся. Эсли называть C++-шный вариант "pass-by-reference", то Java - 100% pass-by-value.

Когда говорят о "передаче по ссылке" в, то имеется в виду cкорее нечто вроде
передачи поинтера (правда, более "безопасного" поинтера); причем называется этот
поинтер "ссылкой".

Это сообщение отредактировал(а) Domestic Cat - 2.8.2004, 17:50


--------------------

PM   Вверх
DarkDS
Дата 2.8.2004, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(Domestic @ 2.8.2004, 17:47)
В Java этот же самый код изменит локальные arg1, arg2, тогда как var1 и var2 не изменятся.

Не скажи.
По твоему что выдаст такой код?
Код

import java.util.*;

public class Test
{
public static void main(String [] args) throws Exception
{
 List l = new LinkedList();

 Test t = new Test();
 
 t.add(l);
 
 Iterator iterator = l.iterator();
 while( iterator.hasNext() )
 {
  System.out.println(iterator.next());
 }  
}

private void add( List test )
{
 test.add("1");
 test.add("2");
 test.add("3");
 test.add("4");
}
}

PM MAIL   Вверх
Domestic Cat
Дата 2.8.2004, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Здесь ты изменяешь ОБЪЕКТ ( l ), пользуясь поинтером ( test, буду называть его ссылкой как
принято). Но изменить sam test НЕЛЬЗЯ. Например, метод:
Код

import java.util.*;

public class Test
{
public static void erase(Object obj)
{
   obj = null;
}

public static void main ( String args [])
{
  Object myObject = new Object();
  erase(myObject);
  System.out.println(myObject);
}
}


- он напечатает хэш код, не null. Если бы myObject был передан по ссылке, мы бы получили null.


Это сообщение отредактировал(а) Domestic Cat - 2.8.2004, 20:34


--------------------

PM   Вверх
Domestic Cat
Дата 2.8.2004, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



1. Передача по ссылке:

методу передается "оригинальный" поинтер;
например
Код


Object a;
f(a);

..
void f(Type& b)
{
    b = NULL;
}



Здесь 'а' принимает другое (локальное) имя ('b'), но она "синхронизирована" с b - если ее занулить, то 'а' тоже будет null.

a (она же b) ----> Object

2. По значению.
Код

Object a = new Object ();
f(a);

..
void f(Object b)
{
    b = null;
}


Ссылка копируется - то есть, у нас есть уже 2 ссылки на объект.
a-----> Object <-----b

С объектом можно делать что угодно, но ссылки "асинхронны" - зануление b никак не влияет на
а.

Это сообщение отредактировал(а) Domestic Cat - 2.8.2004, 21:01


--------------------

PM   Вверх
DarkDS
Дата 2.8.2004, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(Domestic @ 2.8.2004, 20:33)
Здесь ты изменяешь ОБЪЕКТ ( l ), пользуясь поинтером ( test, буду называть его ссылкой как
принято). Но изменить sam test НЕЛЬЗЯ.

Ты будешь смеятся, но я это знаю. smile.gif Просто я хотел сказать что в яве не 100% pass-by-value. Иначе бы этот код вообще не работал smile.gif
PM MAIL   Вверх
redrick
Дата 3.8.2004, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



pass-by-value точно нет, скорее pass-by-reference. Хотя я бы здесь присоединился к AntonSaburov. Действительно, вроде бы все представляют, что происходит, просто разные слова говорят.


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 3.8.2004, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



smile.gif ТЕм не менее, и примитивы и ссылки в Java передаются по значению - если сравнивать со смыслом "передача по ссылке" в C++.


--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.