powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как использовать Задержание объекта и гибкие ссылки?
6 сообщений из 6, страница 1 из 1
Как использовать Задержание объекта и гибкие ссылки?
    #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
Как использовать Задержание объекта и гибкие ссылки?
    #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
Как использовать Задержание объекта и гибкие ссылки?
    #39101237
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
очередной студент?
...
Рейтинг: 0 / 0
Как использовать Задержание объекта и гибкие ссылки?
    #39101271
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вам препод специально дал такие кривые термины, чтобы потом видеть, кто решал сам, а кто подсмотрел в интернете?

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


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