Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как использовать Задержание объекта и гибкие ссылки? / 6 сообщений из 6, страница 1 из 1
11.11.2015, 21:03
    #39101174
Cpagent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
Здравствуйте!!!
Вот есть код, которая считает контрольную сумму файла. По заданию, мы должны использовать контрольную сумму с двумя способами, первая это с помощью задержание объекта, второй с помощью гибких ссылок. Вопрос состоим в том, как эти два метода можно использовать с этим кодом (Который самый внизу) ? Пожалуйста напишите с кодом с комментариями =очень прошу!
P.s В интернете нашел эти методы листинги 1 и 2 методы.

///////////////////////////////////////////////////////////////////////////
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Листинг 1. Класс, иллюстрирующий "задержание объекта"
// BAD CODE - DO NOT EMULATE
public class LeakyChecksum {
    private byte[] byteArray;
    
    public synchronized int getFileChecksum(String fileName) {
        int len = getFileSize(fileName);
        if (byteArray == null || byteArray.length < len)
            byteArray = new byte[len];
        readFileContents(fileName, byteArray);
        // calculate checksum and return it
    }
}



///////////////////////////////////////////////////////////////////////////////////////////
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Листинг 2. Улучшение LeakyChecksum с помощью гибких ссылок
public class CachingChecksum {
    private SoftReference<byte[]> bufferRef;
    
    public synchronized int getFileChecksum(String fileName) {
        int len = getFileSize(fileName);
        byte[] byteArray = bufferRef.get();
        if (byteArray == null || byteArray.length < len) {
            byteArray = new byte[len];
            bufferRef.set(byteArray);
        }
        readFileContents(fileName, byteArray);
        // calculate checksum and return it
    }
}



/////////////////////////////////////////////////////////////////////////////////////////////
Контрольная сумма.
Код: java
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.
43.
44.
45.
46.
package lab4;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class CheckSumExample {
 
    private static final String FILENAME = "C:\\Users\\User\\workspace\\RB\\src\\MassiveRun.java";
     
    private static final String ALGORITHM = "SHA-1";
 
    public static void main(String[] args) {
         
        try {
            // Получаем контрольную сумму для файла в виде массива байт
            final MessageDigest md = MessageDigest.getInstance(ALGORITHM);
            final FileInputStream fis = new FileInputStream(FILENAME);
            byte[] dataBytes = new byte[1024];
            int bytesRead;
            while((bytesRead = fis.read(dataBytes)) > 0) {
                md.update(dataBytes, 0, bytesRead);
            }
            byte[] mdBytes = md.digest();
             
            // Переводим контрольную сумму в виде массива байт в
            // шестнадцатеричное представление
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < mdBytes.length; i++) {
                sb.append(Integer.toString((mdBytes & 0xff) + 0x100, 16)
                        .substring(1));
            }
            System.out.println("Контрольная сумма: " + sb.toString());
        } catch (FileNotFoundException | NoSuchAlgorithmException ex) {
            Logger.getLogger(CheckSumExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CheckSumExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}



[i]В самом методичке указание написано вот так:
Подсчитайте контрольные суммы программ из лабораторных работ №2 или №3 двумя способами: 1) с помощью так называемой «задержание объекта» (образец листинг 1); 2) с использованием гибких ссылок (образец листинг 2). Повторить предыдущее задание с файлом объемом не менее 1 Гбайта. Опишите подробно преимущества и недостатки обоих методов.
И так же в методичке стоят эти два листинга
...
Рейтинг: 0 / 0
11.11.2015, 21:04
    #39101176
Cpagent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
CpagentЗдравствуйте!!!
Вот есть код, которая считает контрольную сумму файла. По заданию, мы должны использовать контрольную сумму с двумя способами, первая это с помощью задержание объекта, второй с помощью гибких ссылок. Вопрос состоим в том, как эти два метода можно использовать с этим кодом (Который самый внизу) ? Пожалуйста напишите с кодом с комментариями =очень прошу!
P.s В интернете нашел эти методы листинги 1 и 2 методы.

///////////////////////////////////////////////////////////////////////////
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Листинг 1. Класс, иллюстрирующий "задержание объекта"
// BAD CODE - DO NOT EMULATE
public class LeakyChecksum {
    private byte[] byteArray;
    
    public synchronized int getFileChecksum(String fileName) {
        int len = getFileSize(fileName);
        if (byteArray == null || byteArray.length < len)
            byteArray = new byte[len];
        readFileContents(fileName, byteArray);
        // calculate checksum and return it
    }
}



///////////////////////////////////////////////////////////////////////////////////////////
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Листинг 2. Улучшение LeakyChecksum с помощью гибких ссылок
public class CachingChecksum {
    private SoftReference<byte[]> bufferRef;
    
    public synchronized int getFileChecksum(String fileName) {
        int len = getFileSize(fileName);
        byte[] byteArray = bufferRef.get();
        if (byteArray == null || byteArray.length < len) {
            byteArray = new byte[len];
            bufferRef.set(byteArray);
        }
        readFileContents(fileName, byteArray);
        // calculate checksum and return it
    }
}



/////////////////////////////////////////////////////////////////////////////////////////////
Контрольная сумма.
Код: java
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.
43.
44.
45.
46.
package lab4;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class CheckSumExample {
 
    private static final String FILENAME = "C:\\Users\\User\\workspace\\RB\\src\\MassiveRun.java";
     
    private static final String ALGORITHM = "SHA-1";
 
    public static void main(String[] args) {
         
        try {
            // Получаем контрольную сумму для файла в виде массива байт
            final MessageDigest md = MessageDigest.getInstance(ALGORITHM);
            final FileInputStream fis = new FileInputStream(FILENAME);
            byte[] dataBytes = new byte[1024];
            int bytesRead;
            while((bytesRead = fis.read(dataBytes)) > 0) {
                md.update(dataBytes, 0, bytesRead);
            }
            byte[] mdBytes = md.digest();
             
            // Переводим контрольную сумму в виде массива байт в
            // шестнадцатеричное представление
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < mdBytes.length; i++) {
                sb.append(Integer.toString((mdBytes & 0xff) + 0x100, 16)
                        .substring(1));
            }
            System.out.println("Контрольная сумма: " + sb.toString());
        } catch (FileNotFoundException | NoSuchAlgorithmException ex) {
            Logger.getLogger(CheckSumExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CheckSumExample.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
}



[i]В самом методичке указание написано вот так:
Подсчитайте контрольные суммы программ 1) с помощью так называемой «задержание объекта» (образец листинг 1); 2) с использованием гибких ссылок (образец листинг 2). Повторить предыдущее задание с файлом объемом не менее 1 Гбайта. Опишите подробно преимущества и недостатки обоих методов.
И так же в методичке стоят эти два листинга
...
Рейтинг: 0 / 0
11.11.2015, 22:56
    #39101237
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
очередной студент?
...
Рейтинг: 0 / 0
11.11.2015, 23:46
    #39101271
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
Это вам препод специально дал такие кривые термины, чтобы потом видеть, кто решал сам, а кто подсмотрел в интернете?

здержание обьекта -> сильная (strong)ссылка.
гибкая ссылка(SoftReference) -> мягкая ссылка. Обьекты, на которые она ссылается, могут удалиться, но jvm старается не удалять их по возможности.
WeakReference -> слабая ссылка. то же что и мягкая, но нет условия стараться неудалять
PhantomReference -> фантомная ссылка. Как таковой ссылки нет, и обьект по ней не получить. Это просто механизм альтернативный финализации, использовать совместно с ReferenceQueue.
...
Рейтинг: 0 / 0
12.11.2015, 11:48
    #39101576
wst
wst
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
Больше похоже на автоперевод какой. Однако подход к переводу "object handle" довольно свежий получился, так и представилось: объект задержали и гибкими ссылками его, гибкими ссылками..
...
Рейтинг: 0 / 0
12.11.2015, 16:08
    #39102005
Cpagent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать Задержание объекта и гибкие ссылки?
chabapok, как мне эти два кода использовать моим основным с контрольной суммой ?
Или это уже готовые коды для подсчета контр суммы:?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как использовать Задержание объекта и гибкие ссылки? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]